2011-09-22 9 views
5

मैंने एक जावास्क्रिप्ट फ़ंक्शन लिखा है जो XmlHttpRequest का उपयोग करके एक वेब सेवा को असीमित रूप से कॉल करता है। मुझे पृष्ठ को प्रस्तुत करने से पहले इस कार्य को अपना काम पूरा करने के लिए कहा गया है।क्या एक सिंक्रोनस XmlHttpRequest को निरस्त करना संभव है?

मैंने सोचा कि मैं AJAX अनुरोध को तुल्यकालिक बना सकता हूं लेकिन मैं नहीं चाहता कि यह पेज बहुत लंबा लटकाए। - अगर प्रतिक्रिया प्राप्त नहीं होती है, तो मैं 1 सेकंड के बाद अनुरोध को निरस्त करना चाहता हूं।

क्या एक सिंक्रोनस XmlHttpRequest को निरस्त करना संभव है?

+0

प्रश्न के रूप में "मैं सिंक XMLHttpRequest के लिए ग्राहक स्क्रिप्ट समाप्ति सेट कर सकते हैं" लगता है? –

उत्तर

4

आप नहीं कर सकते हैं:

http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX sais: "तुल्यकालिक AJAX (वास्तव में SJAX - तुल्यकालिक जावास्क्रिप्ट और XML) मोडल जिसका अर्थ है कि जावास्क्रिप्ट अपने कार्यक्रम प्रसंस्करण जब तक एक परिणाम के सर्वर से प्राप्त किया गया है बंद हो जाएगा है जबकि अनुरोध संसाधित हो रहा है, ब्राउज़र प्रभावी रूप से जमे हुए है। ब्राउजर कॉल को एक अलर्ट बॉक्स या प्रॉम्प्ट बॉक्स जैसा मानता है, केवल उपयोगकर्ता से इनपुट की प्रतीक्षा नहीं करता है, लेकिन रिमोट सर्वर द्वारा इनपुट पर "

एक बार जब ब्राउज़र सिंक अनुरोध चलाता है, तो यह तब तक इंतजार करेगा जब तक कि उसे कोई प्रतिक्रिया न मिले।

2

सबसे पहले, सिंक्रोनस AJAX कॉल बुरा हैं क्योंकि वे पूरे जावास्क्रिप्ट ब्राउज़र इंजन को अवरुद्ध कर रहे हैं (जिसे आप जानते हैं)।

बस कॉल को असीमित रूप से कर रहा है और परिणाम को छोड़कर यदि यह बाद में एक सेकंड के बाद आता है तो पर्याप्त नहीं है? क्या तुम सच में परिणाम आप अभी भी setTimeout() उपयोग कर सकते हैं के लिए इंतजार करना चाहते हैं (सुविधा के लिए jQuery, आवश्यक नहीं):

var result; 
var xhr = $.ajax('/url', function(response) { 
    result = response; 
}); 
setTimeout(function() { 
    if(result) { 
    //AJAX call done within a second, proceed with rendering 
    } else { 
    //One second passed, no result yet, discard it and move on 
    xhr.abort(); 
    } 
}, 1000); 
इस दृष्टिकोण आप ब्राउज़र अवरुद्ध नहीं कर रहे साथ

जबकि अभी भी आप के लिए प्रतीक्षा करने की जरूरत नहीं है AJAX कॉल।

+0

"तुल्यकालिक AJAX कॉल बुरा हैं" - निर्भर करता है, क्योंकि कभी-कभी पूरे जावास्क्रिप्ट ब्राउज़र इंजन को अवरुद्ध करना आवश्यक है :) –

1

XMLHttpRequest समर्थन abort विधि, आप इसके बारे में यहाँ अधिक जानकारी प्राप्त कर सकते हैं: http://www.w3.org/TR/XMLHttpRequest/#the-abort-method

लेकिन तुम कितने browserы इसे समर्थन की जाँच करने की जरूरत है। उदाहरण के लिए, abort विंडोज इंटरनेट एक्सप्लोरर 7 और ऊपर में पेश किया गया था।

send()XMLHttpRequest ऑब्जेक्ट की विधि को कॉल करने से पहले या बाद में आप एन-सेकेंड देरी के लिए टाइमर सेट कर सकते हैं जो एक असीमित ऑपरेशन को बाधित करेगा जो प्रगति पर है।

0

आईई में यह संभव है। टाइमआउट संपत्ति का उपयोग करें। नीचे

कोड मेरे लिए काम किया

xmlhttp.open("method","url",false); 
xmlhttp.timeout="time in ms"; 
xmlhttp.ontimeout=function(){}; 
xmlhttp.send(); 

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

  • कोई संबंधित समस्या नहीं^_^