2010-11-05 9 views
8

jQuery $.ajax विधि पर अजाक्स तैयार राज्यों को कैसे कॉल करें?

+4

बिल्कुल क्या है? '$ .ajax' अपनी स्वयं की 'सफलता' /' त्रुटि'/'पूर्ण 'कॉलबैक लाता है, उन्हें आपकी सभी ज़रूरतों को पूरा करना चाहिए –

+0

हाय, मैं तैयार करना चाहता हूं = 1 और readyState = 4 jQuery वाले के साथ समानताएं क्या हैं? – tetris

उत्तर

4

$.ajax() XmlHttpRequest ऑब्जेक्ट, इसलिए यदि आप वास्तव में स्थिति परिवर्तन के रूप में यह तक पहुँचने के लिए चाहते हैं, आप ऐसा कर सकते हैं:

var xhr = $.ajax({ ... }); 
xhr.onreadystatechange = function() { alert(xhr.readyState); }; 

लेकिन अंतर्निहित कॉलबैक सब आप सबसे अधिक के लिए की जरूरत होनी चाहिए उपयोग करता है, विशेष रूप से success और complete

ज्यादातर मामलों, .ajaxStart() और .ajaxStop() घटनाओं ... के लिए अधिक उचित रूप से पहले अनुरोध आग बातें करने के लिए, beforeSend उपयोग करें, या उदाहरण के एक लोड हो रहा है संदेश जब भी कोई ajax गतिविधि चल रहा है दिखाने के लिए।

+0

धन्यवाद, मैं इस बाहर की जाँच करेंगे। – tetris

+0

नोट: यह कोड ही काम करता है जब तक jQuery 1.4.4 1.5 के साथ के रूप में ajax मॉड्यूल पूरी तरह से फिर से लिखा गया है। मैं हाल के संस्करण (मैं इसे विलंबता समय परीक्षण करना चाहते हैं) में एक समाधान पता नहीं है। – mgutt

+0

यह एक * रेस स्थिति * है चाहेंगे नहीं - या - jQuery एक वादा उपयोग कर रहा है? – Cody

1

आप वस्तु आप ajax() विधि में पारित में success, error, और complete विकल्प के लिए कॉलबैक निर्धारित करके आप सभी की जरूरत प्राप्त करने में सक्षम होना चाहिए। प्रलेखन पर एक नज़र डालें:

http://api.jquery.com/jQuery.ajax/

असल में, यह इस तरह से काम करता है:

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
     alert('Load was performed.'); 
    }, 
    error: function() {alert("error occurred.")}, 
    complete: function() {alert("ajax complete.")} 
}); 

आप वास्तव में क्या मानकों आप कॉलबैक कार्यों में की पहुंच है के लिये दस्तावेज देख सकते हैं।

+0

क्या im की तलाश में, readyState एक है जैसे कि यह जब आप सादा जे एस का उपयोग करें, आप "लोड हो रहा ..." बस से पहले अपने मार्कअप से भर जाता है, jQuery सफलता, त्रुटि, या पूरा न की तरह कुछ करने लगते हैं लिखने के लिए इस readyState का उपयोग करें मैं जो चाहता हूं उसके लिए काम करें। या क्या आपको सिर्फ jQuery के साथ नकली करना है? – tetris

+0

@tada jQuery विधि तैयार चरणों में जांच के पुराने तरीकों को दूर करता है। AJAX कॉल करने से पहले अपने लोडिंग संवाद को न दिखाएं, और कॉलबैक फ़ंक्शंस में इसे छुपाएं? यह वही है जो मैं करता हूं और तर्कसंगत रूप से सादे जेएस तरीके से ज्यादा समझ में आता है। – treeface

+0

ठीक है धन्यवाद .__ – tetris

4

विधि, jQuery 2.0.2 के साथ परीक्षण किया:

$.ajax({ 
    beforeSend: function (jqXHR, settings) { 
     var self = this; 
     var xhr = settings.xhr; 
     settings.xhr = function() { 
      var output = xhr(); 
      output.onreadystatechange = function() { 
       if (typeof(self.readyStateChanged) == "function") { 
        self.readyStateChanged(this); 
       } 
      }; 
      return output; 
     }; 
    }, 
    readyStateChanged: function (xhr) { 
     if (xhr.readyState == 1) { 
      /* Connected! Do something */ 
     } 
    }, 
    url: "..." 
}); 

मूल रूप से, मैं क्या जरूरत एक कॉलबैक था के बाद readyState जब लंबे समय तक मतदान को लागू हो जाता है 1 (कनेक्ट) है, जो, मेरे मामले में, उपयोगी था "पुश "jQuery के साथ अधिसूचनाएं।