2010-07-14 4 views
16

में एक्सएचआर में ब्रेकपॉइंट सेट करें मेरे पास एक ऐसा पृष्ठ है जो एक फॉर्म सबमिट होने पर एक्सएचआर अनुरोध भेजता है और जब मैं प्रतिक्रिया प्राप्त करता हूं तो क्रोम को तोड़ना चाहता हूं। ऐसा लगता है कि यह पूरा करने का सबसे अच्छा तरीका होगा यदि क्रोम में जावास्क्रिप्ट फ़ंक्शन है जिसे मैं कॉल कर सकता हूं तो निष्पादन तोड़ता है लेकिन मैं अब तक ऐसा कुछ भी नहीं ढूंढ पाया। क्या कोई और समाधान है?क्रोम

संपादित:

मैं वास्तव में तो मैं एक ब्रेकपाइंट तरीका है कि निर्धारित नहीं कर सकते एक कॉलबैक अनुरोध के लिए परिभाषित नहीं है। अनुरोध jQuery कोड की इस पंक्ति के साथ भेजा जा रहा है:

$.post(this.action, $(this).serialize(), null, "script"); 

जहां this एक रूप तत्व है। null तर्क वह जगह है जहां आप आमतौर पर कॉलबैक को परिभाषित करेंगे लेकिन "script" तर्क के साथ, सर्वर द्वारा कच्चे जावास्क्रिप्ट को वापस कर दिया जाता है और फिर सीधे निष्पादित किया जाता है, इसलिए ऐसा लगता है कि कोड को तोड़ने और चरणबद्ध करने का एकमात्र तरीका debugger; कथन के साथ है। यह काम करता है, लेकिन कोड के माध्यम से कदम उठाने पर आप वास्तव में नहीं देख सकते कि आप किस लाइन पर हैं, इसलिए यह थोड़ा अजीब है। मुझे संदेह है कि यह क्रोम के डिबगिंग टूल की एक सीमा है।

+0

मुझे यह नहीं मिला। यदि आप कॉलबैक को रद्द करते हैं, तो क्या सभी प्रतिक्रियाओं को अनदेखा नहीं किया जाएगा? आप डीबगर को तोड़ने के लिए कहां चाहते थे? – syockit

उत्तर

12

आप सफलता कॉलबैक में एक ब्रेकपॉइंट सेट कर सकते हैं और डीबगर के माध्यम से कदम उठा सकते हैं। ब्रेकपॉइंट सेट करने के लिए:

  1. "डेवलपर टूल्स" खोलें, और शीर्ष पर "स्क्रिप्ट" टैब पर क्लिक करें।
  2. उस स्क्रिप्ट का चयन करें जिसमें आपके AJAX अनुरोध के लिए सफलता कॉलबैक शामिल है।
  3. बाईं ओर स्थित लाइन नंबर पर क्लिक करें जहां आप ब्रेकपॉइंट चाहते हैं। एक नीला तीर दिखाएगा कि ब्रेकपॉइंट सेट किया गया है।
  4. फिर AJAX अनुरोध को आपके जैसा करें, और डीबगर आपके द्वारा सेट किए गए ब्रेकपॉइंट पर स्वचालित रूप से बंद हो जाएगा।

वैकल्पिक रूप से, आप स्वचालित रूप से डीबगर को आमंत्रित करने के लिए debugger कथन का उपयोग कर सकते हैं। तो के साथ इस अपनी सफलता कॉलबैक की तरह लग रहे हो सकता है:

success: function(data, textStatus, request) { 
    debugger; // pause execution and opens debugger at this point 
    ... 
} 

इसके अलावा जावास्क्रिप्ट डीबगिंग के लिए यह अच्छा article चेकआउट।

हालांकि, पहला दृष्टिकोण बेहतर है क्योंकि आपको अपने कोड को संशोधित करने की आवश्यकता नहीं है।

+0

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

10

आप डेवलपर टूल में स्क्रिप्ट टैब पर भी जा सकते हैं, और दाईं ओर आप एक्सएचआर ब्रेकपॉइंट्स पर क्लिक कर सकते हैं और यूआरएल फ़िल्टरिंग के साथ नया ब्रेकपॉइंट जोड़ सकते हैं।

यदि आप jQuery का उपयोग करते हैं, तो ब्रेकपॉइंट होता है तो आप jQuery.ajax नामक अपने फ़ंक्शन को खोजने के लिए CallStack का उपयोग कर सकते हैं।क्रोम कंसोल (ctrl + shift + जे) नीचे

10

ड्रॉप और प्रकार इनमें से किसी भी:

बस फिर से लिखने jQuery ajax:

var prevajax = jQuery.ajax; 
jQuery.ajax = function() { debugger; return prevajax.apply(jQuery, arguments); }; 

या आप jQuery का उपयोग नहीं कर रहे हैं, XHR पुनर्लेखन कक्षा:

var prevxhr = XMLHttpRequest; 
XMLHttpRequest = function(){debugger; prevxhr.apply(this, arguments);}; 

ब्रेक होने के बाद, जब तक आप AJAX अनुरोध शुरू नहीं करते हैं, तब तक Shift + f11 दबाएं।