2010-08-25 12 views
5

के साथ JQuery का उपयोग करने का प्रयास करते समय कोई भाग्य नहीं है, मैं केकपीएचपी के लिए नया हूं लेकिन इसके साथ काम करने के लिए jQuery प्राप्त करने में असमर्थता के कारण इसका उपयोग छोड़ने के करीब हूं।केकपीएचपी 1.3

मैं केकेपीएचपी 1.3 का उपयोग कर रहा हूं और इसलिए सोचा कि एचटीएमएल और जेएस हेल्पर्स ने जावास्क्रिप्ट और अजाक्स को अनावश्यक बना दिया है, लेकिन मुझे वास्तव में जेएस का उपयोग करने के तरीके पर कोई मदद/एपीआई दस्तावेज नहीं मिल रहा है।

मैं बस सबसे पहले करने की कोशिश कर रहा हूं, jQuery के साथ केकपीएचपी को कुछ डेटा भेज रहा है और फिर कुछ डेटा वापस jQuery और अलर्ट() में प्राप्त करें। किसी कारण से यह काम नहीं कर रहा है।

test.js

$('.social').click(function() 
{ 
    $.ajax({ 
     type: 'POST', 
     url: '/activities/add_activity', 
     data: 'type=social', 
     dataType: 'json', 
     success: function(data) 
     { 
      alert(data); 
     }, 
     error: function() 
     { 
      alert('wut'); 
     } 
    }); 
}); 

function add_activity() 
{ 
    if($this->RequestHandler->isAjax()) 
    { 
     $this->autoRender = false; 
     $this->autoLayout = false; 

     $this->header('Content-Type: application/json'); 

     echo json_encode(array('result'=>'hello'); 
     return; 
    } 
} 

हर बार activities_controller.php मैं वर्ग के साथ बटन पर क्लिक करें 'सामाजिक' मैं चेतावनी "wut" जिसका अर्थ है मिल =: यहाँ मेरी कोड है त्रुटि।

मेरे पास RequestHandler घटक और जावास्क्रिप्ट, जेएस, और अजाक्स सहायक शामिल हैं जो मेरी गतिविधियों_controller.php में शामिल हैं।

इसके अलावा, test.js और jquery.js html-> script() का उपयोग करके लिंक किया गया है; default.ctp में और अन्य सभी jQuery सामग्री काम कर रही है इसलिए यह नहीं है।

मैं भी activities_controller.php के लिए मेरे beforeFilter() में इस मिल गया है:

if($this->RequestHandler->isAjax()) 
{ 
    Configure::write('debug',0); 
} 
parent::beforeFilter(); 

कोई भी विचार क्या गलत है? क्या यह एक jQuery चीज है या एक केकेपीएचपी चीज है? अथवा दोनों?

अग्रिम धन्यवाद,

Infinitifizz

पी.एस.

मैंने कभी भी jQuery में AJAX नहीं किया है, इसलिए हो सकता है कि यह गड़बड़ हो रहा है, तो मैंने कभी ऐसा करने के लिए कुछ किया है, मैंने कभी भी सरल जावास्क्रिप्ट AJAX किया है।

+2

यह उन समयों में से एक है जब डीबग चालू करना वास्तव में उपयोगी होगा - विशेष रूप से PHP त्रुटियों के मामले में "1" के स्तर पर। AJAX अनुरोधों के लिए उस स्तर को सक्षम करने का प्रयास करें और देखें कि आपके केक लॉग में कुछ भी बताया गया है ('/ app/tmp/logs/*')। –

+0

इसे अपने केक विधि में शामिल करने का प्रयास करें: $ this-> लॉग ('एक डिबगिंग संदेश।', LOG_DEBUG); यह देखने के लिए कि क्या विधि कहा जा रहा है। ऐप/tmp/logs/debug.log में आउटपुट के लिए जांचें नोट करें कि आप चर स्ट्रिंग कर सकते हैं - यहां तक ​​कि संदेश स्ट्रिंग के स्थान पर सरणी भी। – Leo

+1

इसके अलावा, नेटवर्क गतिविधि (नेट टैब पर) की निगरानी के लिए फ़ायरफ़ॉक्स में फ़ायरबग का उपयोग करें। – Leo

उत्तर

3

केकपीएचपी पर हार न दें। एक सीखने की वक्र है, लेकिन यह इसके लायक है।

मैं इस तरह यूआरएल निर्दिष्ट करना होगा:

<?php $Url = Router::url(array('controller'=>'activities','action'=>'addActivity'),true); ?> 
$('.social').click(function() 
{ 
    $.ajax({ 
     type: 'POST', 
     url: '<?php echo $Url ?>'; 
     ... 

CakePHP तरफ, मेरी विधि इस तरह होगा:

function addActivity() 
{ 
    $this->autoRender = false; 
    $this->autoLayout = false; 

    App::import('Helper', 'Javascript'); 
    $javascript = new JavascriptHelper(); 

    echo($javascript->object(array('result'=>'hello'))); 
    exit(1); 
} 

मैं if($this->RequestHandler->isAjax()) का उपयोग कभी नहीं, हालांकि मुझे यकीन है कि किसी तरह का आत्मा मुझे बताएगा कि मुझे क्यों चाहिए।

मैं केकपीएचपी सम्मेलन के साथ लाइन में केस नामों का चयन करना पसंद करता हूं।

ध्यान दें कि आपके कोड में यह पंक्ति: echo json_encode(array('result'=>'hello'); में एक बंद ब्रैकेट गुम है।

इसके अलावा, मैं इस तरह के सरल AJAX करने के लिए jQuery का उपयोग नहीं करता - यह डीबग करना मुश्किल हो सकता है, लेकिन यह केवल व्यक्तिगत वरीयता है।

1

यह शायद ऑफटॉप है, लेकिन ...

क्या मैं आदेश मेरी जावास्क्रिप्ट में आवेदन के रूट के लिए में कार्य करें:

/app/views/layout/default.ctp में मैं कोड निम्नलिखित है

<?php 
echo $javascript->codeBlock("var root = '".$html->url('/')."';"); 
?> 

आपका पैरामीटर यूआरएल दिखेगा जैसे:

url: root+'activities/add_activity', 

इस तरह से भले ही आप एप्लिकेशन एक सबफ़ोल्डर में या एक TLD डोमेन स्क्रिप्ट ठीक से काम करेंगे में है।

मेरे लिए "wut" लौटने का अर्थ है कि स्क्रिप्ट आपके यूआरएल पैरामीटर में पृष्ठ तक नहीं पहुंच सका। विशेष रूप से यदि आप उपनिर्देशिका में काम करते हैं तो यह http://server.com/activities/add_activity में दिखेगा। मैं 99% यकीन है कि इस समस्या को :)

एक और सुझाव है हूँ: अजाक्स निकालें जबकि it was meant to work with Prototype बल्कि jQuery

साथ
+0

आह! धन्यवाद! देर से उत्तर देने के लिए खेद है, मैं पिछले हफ्ते से दूर गया हूं, लेकिन धन्यवाद, मैं कम से कम इस वजह से वहां जा रहा हूं! डिफ़ॉल्ट रूप से उस पंक्ति को जोड़ने के बाद यह फ़ंक्शन को कॉल करता है लेकिन मैं हमेशा 'wut' वापस प्राप्त करता हूं, इसका मतलब है कि कम से कम jQuery चल रहा है लेकिन हमेशा त्रुटि प्राप्त हो रही है ... आगे क्या करना है इसके बारे में कोई सुझाव? –

+0

ओह, लगभग भूल गया, मैंने $-> जावास्क्रिप्ट का उपयोग करने के लिए add_activity फ़ंक्शन भी बदल दिया ... जैसे लियो ने पहले कहा था कि इससे भी मदद मिली है। –

+0

आह, बस फ़ायरबग का उपयोग किया गया और ऐसा लगता है कि केकफ़्प एक त्रुटि वापस भेज रहा है जिसमें "चेतावनी: डीबीएक्ल :: चेक() - अनुमतियों में एआरओ/एसीओ नोड लुकअप विफल है। नोड संदर्भ" और फिर यह उपयोगकर्ता सरणी दिखाता है उपयोगकर्ता तालिका से लॉग इन उपयोगकर्ताओं के रिकॉर्ड के साथ। तो मुझे लगता है कि यह एक एसीएल समस्या थी, मैंने अब अनुमति() अनुमतियों में add_activity() जोड़ा है और इसलिए अब मुझे jQuery से सफलता मिलती है! लेकिन ... चेतावनी (डेटा) बस मुझे "[ऑब्जेक्ट ऑब्जेक्ट]" देता है क्योंकि प्रतिक्रिया जेसन नहीं है? मैं जेएसओएन के लिए बहुत नया हूं और केवल कोशिश की क्योंकि यह एक ट्यूटोरियल में था ... –

3

मैं CakePHP में अजाक्स हेल्पर नफरत ... वह यह है कि जब तक मैं इस पाया: http://blog.loadsys.com/2009/05/01/cakephp-jquery-ajax-helper-easy-scriptaculous-replacement/

अब मैं jQuery के साथ देशी केकेपीएचपी अजाक्स कॉल का उपयोग कर सकता हूं! इसमें देखो मैं इस डर्ग-एन-ड्रॉप AJAX सहायक प्रतिस्थापन के साथ अपने सभी "सरल" AJAX मुद्दों को हल करने में सक्षम था। मैं इसे अपने ऐप में हेल्पर्स डायरेक्टरी में छोड़ देता हूं और वहां AJAX.php को बदलता हूं और व्हायोला! jQuery काम कर रहा है। आपको पाठ्यक्रम के लेआउट में jQuery स्क्रिप्ट को शामिल करने की आवश्यकता है। इसे आज़माएं, आप फिर से केकेपीएचपी से प्यार करेंगे!

2

मैं आपको अपने नियंत्रक से इको जेसन डेटा के बजाय डेटा को आउटपुट करने के लिए केकपीएचपी जेसन लेआउट का उपयोग करने की सलाह दूंगा।