2010-07-16 36 views
11

मैं कैसे जांचूं कि पृष्ठ AJAX या HTTP GET/POST अनुरोध लंबित है या नहीं? मैं इस जांच के लिए जावास्क्रिप्ट और/या पायथन का उपयोग करता हूं।लंबित AJAX अनुरोध या HTTP GET/POST अनुरोध

जो मैं करना चाहता था वह एक स्क्रिप्ट निष्पादित करता है यदि किसी पृष्ठ ने सभी अनुरोधों को पूरा कर लिया हो। ऑनलोड मेरे लिए काम नहीं करता है, अगर आपने फायरबग नेट पैनल का इस्तेमाल किया है, तो आप जान लेंगे। पेज लोड होने पर ऑनलोड आग लगती है लेकिन एक संभावना है कि अभी भी लंबित अनुरोध कहीं भी लटक रहा है।

अग्रिम धन्यवाद।

उत्तर

10

यह सोचा बाहर। प्रयास लड़कों के लिए धन्यवाद। बस सादा और सरल जावास्क्रिप्ट।

interValRef = 0; 

interValRef = setInterval("checkState();",100) 

function checkState(){ 
    if(document.readyState == 'complete'){ 
     clearInterval(interValRef); 
     myFunc(); 
    } 
} 
+0

मैं चाहता था कि मूल रूप से जांचें कि पृष्ठ पूरी तरह से लोड हो गया है या नहीं। कोई लंबित http प्राप्त/पोस्ट AJAX अनुरोध नहीं है। उपरोक्त कोड चाल है। – klambiguit

+0

मुझे यकीन है कि तैयार स्टेटस "पूर्ण" बनने के बाद भी HTTP अनुरोध लंबित हो सकता है। 'लोड' घटना उस तैयार स्थिति से मेल खाती है और इसका मतलब यह है कि प्रारंभिक अनुरोध ने अपनी सभी निर्भरताओं को लोड किया है (जैसा कि लंबित अनुरोधों के विपरीत नहीं है)। आप इसे yahoo.com जैसे पृष्ठ पर क्रोम के नेटवर्क टैब में देख सकते हैं। लाल रेखा 'लोड' घटना है लेकिन उसके बाद अक्सर चीजें लंबित होती हैं। – user2859458

0

आपको प्रत्येक XMLHttpRequest का ट्रैक रखने और निगरानी करने की आवश्यकता होगी या यह असीमित कॉलबैक निष्पादित किया गया है या नहीं।

+0

HTML GET/POST अनुरोध पर कोई सुझाव? ऐसा होगा यदि एक आईएफआरएएम एक पृष्ठ में है। – klambiguit

0

आप यह मानते हुए prototype.js का उपयोग कर रहे आप अपने सभी अनुरोध का एक काउंटर के साथ ट्रैक रख सकता है वस्तुओं

var ACTIVE_REQUESTS = 0; // GLOBAL 

ACTIVE_REQUESTS++ 
new Ajax.Request('/your/url', { 
    onSuccess: function(response) { 
    ACTIVE_REQUESTS--; 
    // Handle the response content... 
    } 
})); 

console.log("there are " + ACTIVE_REQUESTS + " open AJAX requests pending"); 
+0

मैं prototype.js का उपयोग कर रहा हूं .. मैं इसे देख लूंगा .. धन्यवाद .. :) – klambiguit

1

मुझे लगता है कि आप जानना चाहते हैं कि HTML पूरी तरह से लोड हो गया है या नहीं। इस मामले में आप dom:loaded ईवेंट का उपयोग कर सकते हैं। यहाँ कैसे प्रोटोटाइप के साथ इसका इस्तेमाल करने (लेकिन अन्य जे एस चौखटे के लिए एक संस्करण होना चाहिए) पर एक उदाहरण है:

document.observe("dom:loaded", function() { 
    // do whatever you want to do 
}); 

इस घटना को जैसे ही डोम पेड़ भरी हुई है सक्रिय हो जाएगा। तो इससे पहले कि सभी छवियों या बाहरी डेटा (iframe सहित) लोड हो जाएं।

3

मुझे लगता है कि आप प्रोटोटाइप.जेएस का उपयोग कर रहे हैं। आप Ajax.activeRequestCount मान की जांच करके प्रोटोटाइप के साथ सक्रिय अनुरोधों को ट्रैक कर सकते हैं। आप यह सुनिश्चित करने के लिए सेटटाइमआउट या सेट इंटरवल का उपयोग करके यह जांच सकते हैं कि पृष्ठ लोड पर ट्रिगर किए गए किसी भी अनुरोध को पूरा कर लिया गया है (यदि आप यही करना चाहते हैं)

+0

यह भी अच्छा है लेकिन केवल AJAX अनुरोध की जांच करता है। http के बारे में/पोस्ट अनुरोध कैसे प्राप्त करें? (डब्ल्यू/एक आईफ्रेम होता है) – klambiguit

0

यहां जांचने का सबसे अच्छा तरीका है।

var loadingDone = document.readyState=="complete" && jQuery.active === 0; 

तो लोडिंग पूर्ण हो जाएगा, अगर अजाक्स कॉल किए जाते हैं। यदि यह झूठा है तो आप प्रतीक्षा जोड़ सकते हैं।

0
document.addEventListener("readystatechange", function(event) { 
    if (document.readyState === "complete") { 
     console.log("complete"); 
    } 
});