2010-02-16 16 views
10

यह कोडJquery AJAXStart ट्रिगर नहीं होता है

$("#loading").ajaxStart(function() { 
     alert("start"); 
     $(this).show(); 
    }); 

मेरे मार्क-अप

<div style="text-align:center;"><img id="loading" src="../images/common/loading.gif" alt="" /></div> 

यहां पूर्ण AJAX अनुरोध है:

$.ajax({ 
     type: "POST",  

     url: "http://localhost/WebServices/Service.asmx/GetResults", 

     data: jsonText, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(response) { 

      var results = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d; 
      PopulateTree(results); 
     }, 

     error: function(xhr, status, error) { 
      var msg = JSON.parse(xhr.responseText); 
      alert(msg.Message); 


     } 
    }); 

$("#loading").ajaxStart(function() { 
     alert("start"); 
     $(this).show(); 
    }); 

    $("#loading").ajaxStop(function() { 
     alert("stop"); 
     $(this).hide(); 
     $("#st-tree-container").show(); 

    }); 

कभी भी "प्रारंभ" चेतावनी नहीं देता है भले ही gif को घूमने के लिए दिखाया गया हो । अजाक्सस्टॉप अपेक्षित के रूप में ट्रिगर हो जाता है। कोई विचार क्यों?

+0

कैसे ajax निकाल दिया है? – epitka

+0

क्या मतलब है "भले ही gif घूमने के लिए दिखाया गया हो?" मुझे आपके प्रश्न में एक gif के साथ कोई मार्कअप या जेएस नहीं दिख रहा है। क्या आप अपने AJAX कॉल को jQuery के उसी उदाहरण के साथ आविष्कार कर रहे हैं जिसके साथ आपका AJAXStart() हैंडलर पंजीकृत है? –

+0

मेरे मार्क-अप में दाएं स्क्रॉल करें, आप वहां gif देखेंगे। – sarsnake

उत्तर

36

क्योंकि .ajaxStart() के लिए अपने हैंडलर तक पंजीकृत नहीं है के बाद ajax अनुरोध पहले से ही (अतीत होता है, जब यह कहा गया है) जा रहा है यह ट्रिगर नहीं रही है। .ajaxStop() के बाद भी पंजीकृत है, लेकिन से पहले अनुरोध समाप्त हो गया है, इसलिए जब यह वापस आता है तो इसे चलाने के लिए लगाया जाता है।

इसे ठीक करने के लिए कदम यह आपका पहला $.ajax() कॉल से पहले:

$("#loading").ajaxStart(function() { 
    $(this).show(); 
}).ajaxStop(function() { 
    $(this).hide(); 
    $("#st-tree-container").show(); 
}); 


अद्यतन: jQuery 1.9 शुरू, AJAX घटनाओं केवल दस्तावेज़ के साथ संलग्न किया जाना चाहिए। http://jquery.com/upgrade-guide/1.9/#ajax-events-should-be-attached-to-document

$(document).ajaxStart(function() { 
    $("#loading").show(); 
}); 

$(document).ajaxStop(function() { 
    $("#loading").hide(); 
    $("#st-tree-container").show(); 
}); 
+0

धन्यवाद निक! यह बहुत उपयोगी था – sarsnake

+0

यह आकर्षण है और मेरे लिए काम कर रहा है! – Navane

0

मैं अगर यह आपकी समस्या का समाधान होगा यकीन नहीं है, लेकिन आम तौर पर मैं संयोजन में debug.info('your message') का उपयोग Firebug alert() के बजाय कंसोल के साथ, के रूप में चेतावनी अपनी स्क्रिप्ट प्रसंस्करण बीच जब तक आप इसे जबकि debug.info काफी विनीत है खारिज।

आप यहां debug.info के कार्यान्वयन को डाउनलोड कर सकते हैं।

+0

मैंने debug.info() के बारे में कभी नहीं सुना है, क्या यह आईई के लिए काम करेगा? मैं आईई – sarsnake

+1

के साथ काम कर रहा हूं मैंने उत्तर में लाइब्रेरी का एक लिंक जोड़ा है। दुर्भाग्यवश ऐसा नहीं लगता है कि यह आईई में काम करेगा, लेकिन मैं डीबगिंग के लिए फ़ायरफ़ॉक्स + फ़ायरबग की अत्यधिक अनुशंसा करता हूं। – tbreffni

2

jQuery 1.9 शुरू, AJAX घटनाओं केवल दस्तावेज़ के साथ संलग्न किया जाना चाहिए।

माइग्रेशन मार्गदर्शिका का संदर्भ लें। http://jquery.com/upgrade-guide/1.9/#ajax-events-should-be-attached-to-document

jQuery 1.9 के रूप में, वैश्विक AJAX ईवेंट (AJAXStart, AJAXStop, AJAXSend, AJAXComplete, AJAXError, और AJAXSuccess) केवल दस्तावेज़ तत्व पर ट्रिगर किए जाते हैं। दस्तावेज़ पर AJAX घटनाओं को सुनने के लिए प्रोग्राम बदलें। यह करने के लिए

$("#status").ajaxStart(function() { $(this).text("Ajax started"); });

बदलें यह: उदाहरण के लिए, कोड वर्तमान में इस तरह दिखता है, तो

$(document).ajaxStart(function() { $("#status").text("Ajax started"); });

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