2010-05-27 11 views
7

में त्रुटि का कारण क्यों है, मैं एक एमवीसी नियंत्रक कार्रवाई को पोस्ट करने के लिए jquery का उपयोग करता हूं जो जानकारी की एक तालिका देता है। पृष्ठ के उपयोगकर्ता विभिन्न लिंक पर क्लिक करके इसे ट्रिगर करते हैं।AJAX अनुरोध पर कॉलिंग abort() को ASP.Net MVC (IE8)

यदि उपयोगकर्ता त्वरित उत्तराधिकार में इन लिंक का एक समूह क्लिक करने का निर्णय लेता है तो मैं किसी भी पिछले AJAX अनुरोध को रद्द करना चाहता था जो समाप्त नहीं हो सकता है।

मैंने पाया है कि जब मैं यह कर कह रही है कि

"The parameters dictionary contains a null entry for parameter srtCol of non-nullable type 'System.Int32'"

अब ajax पोस्ट deffinately सभी में गुजरता है (हालांकि ग्राहक की पीओवी से ठीक) मैं वेब अनुप्रयोग पर त्रुटियां मिलेंगी पैरामीटर, और अगर मैं AJAX अनुरोध को आजमाकर रद्द नहीं करता हूं तो यह ठीक काम करता है।

लेकिन अगर मैं XMLHttpRequest ऑब्जेक्ट पर abort() को कॉल करके अनुरोध रद्द कर देता हूं जो AJAX() समाप्त होने से पहले लौटाता है तो मुझे ASP.Net MVC से त्रुटि मिलती है।

उदाहरण:

//Cancel any pevious request 
if (req) 
{ 
    req.abort(); 
    req = null; 
} 

//Make new request 
req = $.ajax({ 
    type: 'POST', 
    url: "/Myapp/GetTbl", 
    data: {srtCol: srt, view: viewID}, 
    success: OnSuccess, 
    error: OnError, 
    dataType: "html" 
}); 

मैं इस तभी हो पाया है IE8 है। एफएफ में ऐसा लगता है कि कोई समस्या नहीं है।

क्या कोई जानता है कि एमवीसी के लिए त्रुटियों के बिना IE8 में AJAX अनुरोध को कैसे रद्द किया जाए?

किसी भी मदद के लिए धन्यवाद।

उत्तर

3

आईई सर्वर से अनुरोध निकाय का हिस्सा भेजना बंद कर सकता है, सर्वर को प्रोसेसिंग शुरू करने के लिए पर्याप्त अनुरोध दे रहा है, लेकिन सभी पैरामीटर की आवश्यकता नहीं है। आप प्रॉक्सी में आईई की गतिविधि को देखकर इसे देख सकते हैं (जैसे fiddler) --- यदि आप अनुरोध का हिस्सा प्राप्त करते हैं, तो IE abort() को बुरी तरह से संभाला जा रहा है। यदि ऐसा है, तो आप पुराने AJAX अनुरोध को समाप्त करना चाहते हैं, और इसे निरस्त करने के बजाए, अपने ऑनसेफ को कुछ भी करने से रोक सकते हैं।

संपादित करें:

var req; // current/latest request 

var OnSuccess = function(data, textStatus, XMLHttpRequest) { 
    if (XMLHttpRequest != req) return; 
    // latest request has succeeded 
} 

req = $.ajax(...); 

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

+0

मुझे संदेह है कि आप सही हैं। लेकिन मुझे यकीन है कि मेरे जेएस कोड को फिर से लिखना है ताकि निरंतर अनुरोध के लिए ऑनस्यूफ को अनदेखा किया जा सके लेकिन गैर-निरस्त अनुरोधों के लिए चलता है। क्या आप मुझे एक उदाहरण दे सकते हैं? – user169867

+0

मुझे यह पसंद है। मुझे लगता है कि काम करेगा। बहुत धन्यवाद! – user169867

+0

कोई समस्या नहीं! उम्मीद है कि यह काम करता है। – kevingessner