2011-08-09 12 views
5

मेरे कोड है:मैं एक jQuery अजाक्स अनुरोध कैसे डीबग करूं?

var test = "it isn't working"; 
var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', //This is in the same site as the page calling this request, so it's not a same-domain error. 
    success: function(){ 
      test = "it's working"; 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 
alert(test); 

मैं स्थिति कोड का परीक्षण किया है और यह एक 200 और त्रुटि समारोह कभी नहीं बंद हो जाता है करने के लिए बाहर आया था, लेकिन न तो सफलता समारोह करता है। जैसे मैंने अपनी टिप्पणी में कहा, यह एक समान मूल नीति त्रुटि नहीं है। यह सिर्फ "यह काम नहीं कर रहा है" कहता रहता है। यहाँ क्या चल रहा है?

उत्तर

5

आपका AJAX कॉल असीमित है। यह अभी तक पूरा नहीं हुआ है जब अंत में आपकी चेतावनी चलती है। सफलता समारोह में एक वास्तविक चेतावनी दें और आपको वहां अपना परिणाम देखना चाहिए।

याद रखें कि AJAX कॉल करने से केवल एसिंक्रोनस AJAX कॉल शुरू होता है और फिर आपका शेष कोड चलना जारी रहता है। आपके द्वारा पोस्ट किए गए कोड उदाहरण में, इसका मतलब है कि आपके alert(test) कॉल अजाक्स कॉल पूरा होने से ठीक पहले चला जाता है।

आप केवल सफलता हैंडलर के भीतर से अजाक्स कॉल के परिणामों की जांच कर सकते हैं।

var test = "it isn't working"; 
var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', //This is in the same site as the page calling this request, so it's not a same-domain error. 
    success: function(){ 
      alert("it's working"); // put this here and you will see it 
            // if the ajax call is successful 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 
+0

तुम भी जोड़ने 'async का विकल्प है: सेटिंग्स आप अपने' ajax' कॉल में पारित करने के लिए TRUE' है, लेकिन यह ध्यान रखें कि इस निष्पादन की है कि पूरे धागा रुक जाएगा अनुरोध तक वापस आने तक आपकी स्क्रिप्ट में। – dfreeman

+0

@ स्चिफ गेलौफेन - मुझे लगता है कि आप 'async: false' का मतलब है। अजाक्स कॉल को एक सिंक्रोनस कॉल में बदलना वास्तव में एक विकल्प है, लेकिन क्योंकि यह अजाक्स कॉल की अवधि के लिए पूरे वेब पेज को लॉक करता है, यह शायद ही कभी सबसे अच्छा डिज़ाइन विकल्प है। यह 'async: true' के साथ कोड के लिए अधिक जटिल है, लेकिन एक बेहतर उपयोगकर्ता अनुभव देता है। – jfriend00

+0

मेरे हिस्से पर मूर्ख, मूर्ख टाइपो। हां, 'async: false'। यह जरूरी नहीं है कि एक सिंक्रोनस AJAX अनुरोध पूरे पृष्ठ को लॉक करता है (कम से कम, ऐसी कई परिस्थितियां हैं जिनके अंतर्गत यह नहीं है), लेकिन निश्चित रूप से यह आपकी सफलता में प्रतिक्रिया पर निर्भर तर्क देने के लिए बेहतर अभ्यास माना जाता है वापस कॉल करें। – dfreeman

0

आप

var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', 
    success: function(){ 
      alert("it's working"); 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 

यह काम करेंगे जैसे कि यह कर सकते हैं ....

1

ले जाएँ कि चेतावनी (परीक्षण) अंत से ajax कॉल की सफलता समारोह में। यदि यह अलर्ट करता है तो इसका मतलब है कि कोड काम कर रहा है अन्यथा यह नहीं है। आप केवल अपनी सफलता वापसी पर AJAX कॉल डीबग कर सकते हैं।

var test = "it isn't working"; 
var response = $.ajax({ 
    type: 'GET', 
    url: 'jquerydemo.php', 
    success: function(){ 
      test = "it's working"; 
      alert(test); //It will alert when you ajax call returns successfully. 
     }, 
    error: function(){ 
      alert("Error detected"); 
     } 
}).responseText; 

उम्मीद है कि इससे मदद मिलती है।

2

इन प्रकार की चीजों को डीबग करने के लिए, मैं find Firebug एक अनिवार्य उपकरण। यह आपको सर्वर से बिल्कुल प्रतिक्रिया दिखाएगा (500 त्रुटि, 553 त्रुटि, आपके पास क्या है)। आप अपने जावास्क्रिप्ट कोड में ब्रेक पॉइंट डाल सकते हैं और इसे चरण-दर-चरण डीबग कर सकते हैं। फायरबग फ़ायरफ़ॉक्स पर काम करता है।

आईई के लिए, आप डेवलपर टूल्स फीचर का उपयोग कर सकते हैं जो फ़ायरबग के समान है, खासकर आईई 9 पर जो आईई 7 या आईई 8 के लिए डेवलपर टूल्स के पिछले संस्करणों की तुलना में अधिक परिपक्व लगता है।

+0

आईई के लिए, फायरबग लाइट भी है - http://getfirebug.com/firebuglite –

+0

आप क्रोम में CTRL-SHIFT-J भी दबा सकते हैं – pilavdzice

12

इस प्रयास करें:

error: function(jqXHR, textStatus, errorThrown) { 
     console.log(JSON.stringify(jqXHR)); 
     console.log("AJAX error: " + textStatus + ' : ' + errorThrown); 
} 
संबंधित मुद्दे