2009-02-04 13 views
14

में एक पूर्ण पृष्ठ रीफ्रेश कर रहा है, मैं jQuery के साथ AJAX कॉल कर रहा हूं। AJAX कॉल IE 7 में ठीक काम करता है, लेकिन इस कॉल को करते समय फ़ायरफ़ॉक्स 3 हमेशा एक पूर्ण पृष्ठ रीफ्रेश करता है। AJAX कॉल ASP.NET पृष्ठ विधि पर पोस्ट कर रहा है।jQuery का AJAX फ़ायरफ़ॉक्स

क्या jQuery में कोई समस्या है या क्या मुझे बस कुछ सेटिंग याद आ रही है?

$.ajax({ 
async: false, 
type: "POST", 
url: "Default.aspx/DoSomething", 
data: "{" + parms + "}", 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
cache: false, 
success: function(data) { succesfulPost(data); }, 
error: function(XMLHttpRequest, textStatus, errorThrown) { errorPost(textStatus, errorThrown); } 

});

कॉल एचटीएमएल बटन ऑनक्लिक घटना से किया जा रहा है। मैंने 'झूठी वापसी' की कोशिश की इस अजाक्स कॉल को बनाने वाली विधि में, लेकिन फ़ायरफ़ॉक्स में पूर्ण रीफ्रेश जारी है।

मैंने async = true सेट करने का प्रयास किया है, लेकिन ऐसा लगता है कि यह काम नहीं करता है। फ़ायरफ़ॉक्स बस चल रहा है और बैकएंड के लिए प्रतिक्रिया वापस करने की प्रतीक्षा नहीं करता है। फ़ायरफ़ॉक्स (जेएस में) वास्तव में AJAX कॉल में एक त्रुटि उत्पन्न कर रहा है। जैसा कि आप ऊपर देख सकते हैं, त्रुटि फ़ंक्शन परिभाषित किया गया है और जब मैं async = true सेट करता हूं तो यह ट्रिगर होता है।

+0

मैं async = true रखूंगा, और वहां से डीबग करूँगा। क्या आपके पास फायरबग स्थापित है? यदि ऐसा है, तो फ़ायरबग खोलें, और "नेट" टैब पर क्लिक करें, और देखें कि जब आप बटन पर क्लिक करते हैं तो क्या कहा जाता है। आपको Default.aspx/DoSomething और किसी भी पैरामीटर को पारित करने का अनुरोध देखना चाहिए। देखें कि वहां अजीबता है या नहीं। – Carl

उत्तर

11

वापसी झूठी आपको जो चाहिए वह है, हालांकि यदि उस पंक्ति को हिट करने से पहले जावास्क्रिप्ट त्रुटि उत्पन्न होती है, तो ब्राउज़र खुशी से लिंक-क्लिक या बटन-क्लिक ईवेंट को जारी रखेगा।

आप कोशिश/पकड़ ब्लॉक के साथ संभावित समस्या क्षेत्रों को घेरने का प्रयास कर सकते हैं। अपने हैंडलर में पहला विवरण

e.preventDefault:

वैकल्पिक रूप से आप इस कोशिश कर सकते हैं। यह डिफ़ॉल्ट घटना को होने से रोकना है, और मुझे लगता है कि आप इसे आगे कॉल कर सकते हैं ... मैंने अभी कोशिश नहीं की है।

संपादित करें: मैं यह भी जोड़ना चाहता हूं कि AJAX त्रुटि: हैंडलर केवल सर्वर से आने वाली त्रुटियों को जाल करता है ... 403 या 500 की तरह। आपको अभी भी कोशिश/पकड़ में AJAX कॉल को लपेटना चाहिए।

+1

event.preventDefault ने चाल की। मैंने एसिंक को सत्य पर सेट किया और उपरोक्त जोड़ा और अब सब कुछ व्यवहार करने लगता है। – Danno

+0

दिलचस्प। खुशी है कि यह सब काम किया! – Carl

+0

यदि आप यहां विशिष्ट कोड उदाहरण जोड़ सकते हैं तो यह अच्छा होगा। – codea

1

क्या यह कॉल एक क्लिक ईवेंट के अंदर है? यदि ऐसा है, तो सुनिश्चित करें कि क्लिक ईवेंट के अंत में "वापसी झूठी" है। सिर्फ एक विचार। मुझे पता है कि यह बहुत पुरानी टोपी है, लेकिन, मैंने सोचा कि मैं इसे किसी भी तरह का उल्लेख करूंगा।

अन्यथा, आपकी कॉल जो मैं बता सकता हूं उससे ठीक दिखती है।

12

आप AJAX विधि का आविष्कार कैसे कर रहे हैं? यह उस घटना को रद्द करने जितना आसान हो सकता है जो AJAX अनुरोध शुरू करता है यदि यह फ़ॉर्म पर सबमिट करने का भी कारण बनता है।

<input type="submit" onclick="doAjaxSubmit();return false;" value="Update" /> 

"वापसी झूठी;" जोड़ना सामान्य सबमिट कार्रवाई रद्द कर दी जाएगी। यदि यह किसी टेक्स्ट बॉक्स से आ रहा है, तो आप AJAX करने के लिए सेट की गई कुंजीपटल (या जो कुछ भी) हैंडलर के लिए हैंडलर में e.preventDefault जोड़ना चाहेंगे।

+0

बिल्कुल मैं क्या सोच रहा था। तो, शायद मैं आधार से बहुत दूर नहीं हूं अगर कोई और एक ही बात सोच रहा था;) – Carl

+0

यह मेरे मुद्दे को हल करता है, समाधान के लिए धन्यवाद। क्रोम में ठीक काम कर रहा था लेकिन एफएफ या आईई नहीं। क्रोम के लिए एक और +1, भले ही तकनीकी रूप से यह मेरी गलती थी क्रोम ने इसे अच्छी तरह से संभाला। – ToddBFisher

4

इसके अलावा, यदि आपका इनपुट टाइप = "सबमिट" है ... तो आप इसे = "बटन" टाइप करने के लिए बदल सकते हैं। फिर यह एक फॉर्म जमा करने की कोशिश नहीं कर रहा है ... केवल अपना "क्लिक" ईवेंट कर रहा है।

+0

इससे मुझे सही दिशा में ले जाया गया। मेरे पास एक ऐसे फॉर्म में एक बटन था जिसमें कोई विशिष्ट प्रकार नहीं था। जब मैंने एजेक्स कॉल जमा किया तो यह एक पेज रीलोड ट्रिगर करता रहा। टाइप करने के लिए बटन प्रकार को सेट करना = "बटन" भूमिका = "बटन" ने मेरे लिए समस्या तय की है – MichaelH

1

मुझे अजाक्स का उपयोग करके फ़ायरफ़ॉक्स के साथ एक ही समस्या थी। मेरे पास एक फॉर्म टैग के भीतर कई इनपुट तत्व थे। हालांकि, फॉर्म टैग पेज को रीफ्रेश करने का कारण बन रहा था, भले ही मैंने अपने टैग को बटन टैग के साथ बदल दिया। मैंने फॉर्म टैग को एक div के साथ बदल दिया और समस्या चली गई।

मैंने उपरोक्त वर्णित e.preventDefault() भी कोशिश की। इससे समस्या हल हो गई, जबकि मुझे फॉर्म टैग का उपयोग जारी रखने की इजाजत दी गई।