2012-05-02 23 views
9

मुझे jQuery AJAX में एक साधारण कॉलबैक फ़ंक्शन के साथ कोई समस्या है। Google ओवरफ्लो की सहायता और ढेर नहीं करेगा, इसलिए मुझे लगता है कि यह कुछ विशिष्ट नहीं हो सकता है बल्कि कुछ ऐसा देखने के लिए मैं बहुत अनजान हूं। मेरे लिए कोड बिल्कुल वैसा ही दिखता है जैसा इसे करना चाहिए।jquery AJAX कॉलबैक फ़ंक्शन क्यों काम नहीं करता है?

तो, यहाँ कोड है:

function sendMessage(message) 
{ 
//Establish connection to php script 
$.ajax({ 
    type: 'POST', 
    url: 'action/chat/test.php', 
    success: function(feedback){ 

     alert(feedback); 

    } 
}).error(function(){ 
    //Do some error handling here 
}); 
} 

test.php में यह बस का कहना है

<?php 
    echo "called"; 
?> 

जहां तक ​​मैं चिंतित हूँ "कहा जाता है" सतर्क कर दिया जाना चाहिए - लेकिन यह नहीं है। मैंने पहले से ही जांच की है कि फ़ंक्शन sendMessage() को कॉल किया जाता है (और पैरामीटर संदेश अब के लिए कोई फर्क नहीं पड़ता)।

क्या किसी को कोई विचार है?

+0

क्या आपके पास कोई स्क्रिप्ट त्रुटियां हैं? फायरबग कंसोल की जांच करें। – Shyju

+0

यदि आप 'sendMessage()' की शुरुआत में एक चेतावनी देते हैं, तो क्या यह दिखाता है? – jfriend00

+0

दो सबसे लोकप्रिय विकल्प: जावास्क्रिप्ट त्रुटियों को AJAX अनुरोध नहीं भेजा जा रहा है, या AJAX अनुरोध के साथ एक समस्या जिसका अर्थ है 'सफलता' के बजाय 'त्रुटि', कॉलबैक फ़ंक्शन निष्पादित किया गया है। अपने ब्राउज़र डीबगर का उपयोग करना एक अच्छा पहला कदम होगा। –

उत्तर

14

अद्यतन: यह भी ध्यान रखना एक बात है कि आप फ़ायरबग की तरह किसी प्रकार का डीबगर का उपयोग करें। फिर आप नेटवर्क टैब पर जा सकते हैं और यह देखने के लिए मैन्युअल रूप से प्रतिक्रिया और प्रतिक्रिया मैन्युअल रूप से देख सकते हैं कि उसे 200 प्रतिक्रिया या आंतरिक सर्वर त्रुटि प्राप्त हो रही है, आदि

अपने सफल कार्य में console.log(data); जोड़ने का प्रयास करें ताकि यह देखने के लिए कि कुछ भी हो रहा है या नहीं लौटा हुआ। डॉक्स से

function sendMessage(message) 
{ 
    //Establish connection to php script 
    $.ajax({ 
     type: 'POST', 
     url: 'action/chat/test.php' 
    }).done(function(data) { console.log(data); }) 
    .fail(function() { alert("error"); }) 
    .always(function() { alert("complete"); }); 
} 

:

तुम भी .always(data) इस्तेमाल कर सकते हैं

डेप्रिकेशन नोटिस: jqXHR.success(), jqXHR.error(), और jqXHR.complete() कॉलबैक jQuery 1.8 में बहिष्कृत किया जाएगा। अपने कोड को अंतिम हटाने के लिए तैयार करने के लिए, jqXHR.done(), jqXHR.fail(), और jqXHR.always() का उपयोग करें।

+2

मुझे समस्या मिली है! मेरे अपाचे से फ़ाइल एक्सेस के साथ कुछ समस्या थी। अपाचे को फ़ाइल को पढ़ने की अनुमति नहीं थी - हालांकि मैंने इसे कोडा के साथ बनाया है जैसा कि मैं आमतौर पर करता हूं। अब कॉलबैक काम करता है। मैं बस स्टैक ओवरफ़्लो में शामिल हो गया और कहने के लिए कि मैं सभी त्वरित उत्तरों से अभिभूत हूं! धन्यवाद! – weltschmerz

+0

यह भी ध्यान रखना एक बात है, सुनिश्चित करें कि आप किसी प्रकार का डीबगर जैसे फ़ायरबग का उपयोग करें। फिर आप नेटवर्क टैब पर जा सकते हैं और अनुरोध यूआरएल देख सकते हैं और मैन्युअल रूप से प्रतिक्रिया देख सकते हैं कि यह 200 प्रतिक्रिया या आंतरिक सर्वर त्रुटि आदि प्राप्त कर रहा है या नहीं। – Fostah

+0

धन्यवाद! मुझे क्या चाहिए – weltschmerz

1

शायद यह त्रुटि प्रबंधन है। यदि आप त्रुटियों को संभालना चाहते हैं, तो एक और विशेषता है जिसे आप ऑजेक्स में पास ऑब्जेक्ट दे सकते हैं, यह "त्रुटि" है, और पेज टाइमआउट को संभालने के लिए "टाइमआउट" भी है। $ .ajax फ़ंक्शन देखें और आपको ये विशेषताएं मिलेंगी।

+0

जब मैंने चेतावनी से पहले त्रुटि प्रबंधन का उपयोग करने का प्रयास किया, तो उसने कुछ भी चेतावनी नहीं दी। अब यह करता है। PHP फ़ाइल के साथ कुछ गलत लगता है, हालांकि पथ सही है। – weltschmerz

+1

मुझे समस्या मिली है! मेरे अपाचे से फ़ाइल एक्सेस के साथ कुछ समस्या थी। अपाचे को फ़ाइल को पढ़ने की अनुमति नहीं थी - हालांकि मैंने इसे कोडा के साथ बनाया है जैसा कि मैं आमतौर पर करता हूं। अब कॉलबैक काम करता है। मैं बस स्टैक ओवरफ़्लो में शामिल हो गया और कहने के लिए कि मैं सभी त्वरित उत्तरों से अभिभूत हूं! धन्यवाद! – weltschmerz

4

बस संदर्भ के लिए, ऐसा व्यवहार है जो इस तरह समाप्त हो सकता है (यानी किया गया() नहीं कहा जाता है)।

यहाँ

यह है:

  1. मान लीजिए आप एक JSON ऑब्जेक्ट (आप "स्वीकार" माइम प्रकार के साथ के लिए कहा) की उम्मीद है।
  2. मान लीजिए कि जेसन स्ट्रिंग मान्य नहीं है।

इस मामले में() कभी नहीं कहा जाता है, लेकिन हमेशा() होगा। और हमेशा() में आपको शुद्ध पाठ के रूप में "बुरी तरह से" स्वरूपित उत्तर मिल जाएगा।

संबंधित मुद्दे