मुझे कैसे पता चलेगा कि jQuery के पास अजाक्स अनुरोध लंबित है?


89

मुझे हमारे द्वारा किए गए jQuery नियंत्रण के साथ कुछ समस्याएं हैं। मान लें कि आपके पास एक ड्रॉपडाउनलिस्ट है जो आपको उस आइटम की आईडी दर्ज करने की अनुमति देता है जिसे आप ढूंढ रहे हैं, और जब आप ENTER दबाते हैं या एक टेक्स्टबॉक्स में ध्यान केंद्रित करते हैं तो यह jQuery के माध्यम से मान्य करता है कि आपके द्वारा दर्ज की गई आईडी सही है, अगर यह नहीं करता है तो अलर्ट दिखा रहा है 'टी।

बात यह है कि जब एक सामान्य उपयोगकर्ता इसमें एक अमान्य मान दर्ज करता है और सबमिट बटन दबाकर फ़ोकस खो देता है, तो फॉर्म जमा होने के बाद jQuery पोस्ट वापस आ जाता है।

क्या कोई तरीका है जो मैं देख सकता हूं कि क्या jQuery द्वारा कोई Async अनुरोध प्रसंस्करण है ताकि मैं फ़ॉर्म सबमिट करने की अनुमति न दूं?

जवाबों:


37

आप इस्तेमाल कर सकते हैं ajaxStart और ajaxStop जब अनुरोध सक्रिय हैं का ट्रैक रखने के।


इसने मेरे लिए बेहतर काम किया, क्योंकि HtmlHelper का उपयोग करके मेरा नियंत्रण कई बार प्रदान किया जा रहा था। धन्यवाद!
सबनितो

यह मेरे लिए काम किया! मैं ajaxSend और ajaxSuccess का उपयोग कर रहा था, लेकिन कुछ बार मुझे कई ajax अनुरोध भेजे गए थे और मैं केवल शुरुआत में और अंत में एक बार कोड का एक पाइस चलाना चाहता था। ajaxStart और ajaxStop बिल्कुल वही था जिसकी मुझे तलाश थी! धन्यवाद
ScottyG

2
2019 में लिंक पुराना है
क्रिस्टियन निसेन

228

$.active सक्रिय अजाक्स अनुरोधों की संख्या लौटाता है।

अधिक जानकारी यहाँ


यह वास्तव में सवाल का जवाब देता है। धन्यवाद।
डेव सॉलोमन

एक लाइनर और लघु समाधान बहुत अच्छा
MSTdev

24
 $(function () {
        function checkPendingRequest() {
            if ($.active > 0) {
                window.setTimeout(checkPendingRequest, 1000);
                //Mostrar peticiones pendientes ejemplo: $("#control").val("Peticiones pendientes" + $.active);
            }
            else {

                alert("No hay peticiones pendientes");

            }
        };

        window.setTimeout(checkPendingRequest, 1000);
 });

एक अच्छा समाधान लगता है लेकिन, क्या आपने "अधिकतम कॉल स्टैक आकार" के साथ किसी भी समस्या का पता लगाया है?
मिकेल

11

$ .Ajax () फ़ंक्शन एक XMLHttpRequest ऑब्जेक्ट देता है। उस चर में संग्रहीत करें जो सबमिट बटन के "ऑनक्लिक" ईवेंट से सुलभ है। जब सबमिट क्लिक पर संसाधित चेक को देखने के लिए देखें कि क्या XMLHttpRequest वैरिएबल है:

1) अशक्त, जिसका अर्थ है कि अभी तक कोई अनुरोध नहीं भेजा गया है

2) है कि तैयार मूल्य 4 है (लोड)। इसका मतलब है कि अनुरोध भेज दिया गया है और सफलतापूर्वक वापस आ गया है।

उन दोनों में से किसी भी मामले में, सही लौटें और जमा को जारी रखने की अनुमति दें। अन्यथा सबमिट को ब्लॉक करने के लिए गलत तरीके से लौटें और उपयोगकर्ता को कुछ संकेत दें कि उनकी सबमिट क्यों नहीं हुई। :)


4
यदि अनुरोध ऑब्जेक्ट मौजूद है, तो यह निर्धारित करने के लिए अशक्त की जाँच करना महत्वपूर्ण है, लेकिन यदि यह अशक्त नहीं है, तो आपको वास्तव request.readyState > 0 && request.readyState < 4में 'सक्रिय' अनुरोध निर्धारित करने के लिए जांच करनी चाहिए क्योंकि रेडीस्टेट 0 इंगित करता है कि यद्यपि ऑब्जेक्ट बनाया गया है, एक वेब-अनुरोध शुरू नहीं किया गया है ।
नाथन टेलर

1

यदि अनुरोध सक्रिय है, तो हमें अनुरोध को रद्द करने के लिए $ .ajax.abort () पद्धति का उपयोग करना होगा। यह वादा ऑब्जेक्ट का उपयोग करता readyState कि क्या अनुरोध सक्रिय है या नहीं की जाँच करने के संपत्ति।

एचटीएमएल

<h3>Cancel Ajax Request on Demand</h3>
<div id="test"></div>
<input type="button" id="btnCancel" value="Click to Cancel the Ajax Request" />

जेएस कोड

//Initial Message
var ajaxRequestVariable;
$("#test").html("Please wait while request is being processed..");

//Event handler for Cancel Button
$("#btnCancel").on("click", function(){
if (ajaxRequestVariable !== undefined)

if (ajaxRequestVariable.readyState > 0 && ajaxRequestVariable.readyState < 4)
{
  ajaxRequestVariable.abort();
  $("#test").html("Ajax Request Cancelled.");
}
});

//Ajax Process Starts
ajaxRequestVariable = $.ajax({
            method: "POST",
            url: '/echo/json/',
            contentType: "application/json",
            cache: false,
            dataType: "json",
            data: {
        json: JSON.encode({
         data:
             [
                            {"prop1":"prop1Value"},
                    {"prop1":"prop2Value"}
                  ]         
        }),
        delay: 11
    },

            success: function (response) {
            $("#test").show();
            $("#test").html("Request is completed");           
            },
            error: function (error) {

            },
            complete: function () {

            }
        });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.