2013-11-26 23 views
23

के साथ अजीब AJAX बग मैं वर्तमान में एक पूरी तरह से HTML और जावास्क्रिप्ट संचालित वेब ऐप पर काम कर रहा हूं जो दूरस्थ वेब सेवा का उपभोग करने के लिए सीओआरएस का उपयोग करता है लेकिन वर्तमान में आईई 11 के साथ एक जीईटी अनुरोध करने में परेशानी है। मजाकिया बात यह है कि हमें आईई 8/9/10 में ठीक काम नहीं मिला है।आईई 11

समस्या यह है कि आईई 11 टाइमआउट पर प्रतीत होता है और सर्वर से प्रतिक्रिया के लिए इंतजार नहीं करता है। ajax कॉल बस है:

$.ajax(url, { 
    dataType: 'json', 
    complete: complete, 
    type: 'GET', 
    global: true, 
    success: success, 
    crossDomain: true, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

नेटवर्क टैब में और फ़िडलर का उपयोग कर मैं IE देख सकते हैं कभी नहीं भी अनुरोध भेजता है।

क्या किसी के पास कोई विचार है?

EDIT: मैं उल्लेख करना भूल गया कि मैंने पहले ही कैश की कोशिश की है: झूठी। मुझे यह भी बहुत अजीब लगता है कि अगर मैं देव से 9 तक देव उपकरण में दस्तावेज़ मोड को स्विच करता हूं तो फिर से कॉल करता है, फिर भी जब मैं आईई को साफ़ कर देता हूं और इसे पुनरारंभ करता हूं, कैश सही है या गलत है। बहुत विचित्र : \

+0

क्या आप देख सकते हैं कि IE11 में पूर्व-उड़ान विकल्प अनुरोध के साथ समस्याएं हैं या नहीं? क्या आप सर्वर पर विकल्प अनुरोध लॉग कर सकते हैं? – Halcyon

+0

यह जांच कर डीबग करें कि AJAX के कौन से विकल्प आपको –

+0

जारी करते हैं, मुझे नहीं पता कि यह अभी भी एक मुद्दा है, लेकिन आपने अपनी आईई [सुरक्षा क्षेत्र] (http: // stackoverflow) की जांच की है।कॉम/प्रश्न/3362474/jquery-AJAX- विफल-इन-या-ऑन-क्रॉस-डोमेन-कॉल) CORS को अनुमति देने के लिए? – rockerest

उत्तर

29

आईई कैशिंग के लिए प्रसिद्ध है। सुनिश्चित करें कि आपको कैश प्रतिक्रिया नहीं मिल रही है। आप या तो cache संपत्ति मान false पर सेट कर सकते हैं या यूआरएल में एक अद्वितीय टाइमस्टैम्प जोड़ सकते हैं ताकि यह कैश प्रतिक्रिया न हो। आप अद्वितीय टाइमस्टैम्प प्राप्त करने के लिए $.now() विधि का उपयोग कर सकते हैं।

कैश संपत्ति

$.ajax(url, { 
    dataType: 'json', 
    cache : false, 
    //Other things ... 
} 

एक अनूठा टाइमस्टैम्प जोड़ने URL पर

var url="somePage.php?"+$.now(); 
//Use this url now for making the ajax call 

$.now() विधि है संख्या अभिव्यक्ति द्वारा वापस लिए एक आशुलिपि स्थापना (new Date).getTime()

+0

आपके उत्तर के लिए धन्यवाद। मैंने टाइम स्टैंप जोड़ने की कोशिश की है लेकिन इससे कोई फर्क नहीं पड़ता। – Daveo

+0

@ डेवो: क्या आपको कोई स्क्रिप्ट त्रुटियां मिल रही हैं? – Shyju

+0

क्या होता है यह देखने के लिए फ़ायरबग का उपयोग करें शायद '$ .now()' से पहले एक प्रश्नचिह्न होना चाहिए, अन्यथा यूआरएल टूट जाएगा। – qwerty

5

मुझे यकीन है कि नहीं हूँ, शायद यह कैशिंग है, संपत्ति सेट करने का प्रयास "कैश: गलत"

अन्यथा, आप भी अपने यूआरएल के अंत में एक datetime जोड़ने के लिए, ताकि आप हर एक है कोशिश कर सकते हैं विभिन्न यूआरएल और आईई

url +""+ (new Date()).getTime() 
2

यदि आप स्थानीय चल रहे हैं, तो कोशिश करें झूठ को crossDomain स्विचिंग। मैंने उस पर अटकने में थोड़ा सा समय बिताया। क्रोम ने crossDomain को संभाला, लेकिन IE में यदि आप crossDomain का उपयोग नहीं कर रहे हैं और आपने इसे सत्य पर सेट किया है तो यह चुपचाप विफल हो जाएगा।

3

अपने में हेड टैग

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1"> 
2

में इस का उपयोग करता है मैं जानता हूँ कि इस सूत्र पुराना है, लेकिन सिर्फ उन है कि इस मुद्दे का सामना के लिए एक अतिरिक्त चेक के रूप में, जाँच करें कि आपके विश्वसनीय साइट्स ज़ोन सेटिंग डोमेन के बीच उपयोग की अनुमति। "विविध" के तहत पहली सेटिंग वह सेटिंग है जिसे आप चाहते हैं।

"सक्षम करें" पर "डोमेन पर डेटा स्रोतों तक पहुंचें" सेट करें।

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