2011-06-29 16 views
9

के साथ काम नहीं कर रहे हैं। मैं इस समस्या को घंटों तक हल करने की कोशिश कर रहा हूं (यहां तक ​​कि यहां पर खोजे गए समाधानों में से कोई भी नहीं) इसलिए मेरे पास कोई अन्य विकल्प नहीं था लेकिन किसी को यह बताने के लिए कि यह क्यों है हो रहा है और मैं इसे कैसे ठीक कर सकता हूं।getJSON या AJAX अनुरोध IE9

यह (अन्य संस्करणों की जरूरत नहीं है)

उदाहरण कोड यहाँ है एक सरल कोड है कि Firefox के साथ नहीं बल्कि IE9 के साथ काम करता है:

http://jsfiddle.net/z5b2J/

स्रोत इस एक है:

$.ajax({ 
    url: "http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400", 
    success: function(){ 
    alert('hi'); 
    } 
}); 

वेबसाइट को उद्देश्य के उद्देश्य के लिए वास्तविक होने की आवश्यकता नहीं है।

जैसा कि आप फ़ायरफ़ॉक्स के नीचे पहेली में देख सकते हैं, एक चेतावनी बॉक्स "हाय" कहता है लेकिन यदि आप IE9 में सटीक कोड चलाते हैं, तो अलर्टबॉक्स प्रकट नहीं होता है।

वही स्थिति getJSON विधि के साथ होती है, यह मेरे लिए एक समस्या है क्योंकि मैं अलर्ट के बजाय कुछ कोड चलाने के लिए चाहता हूं लेकिन यह IE9 में नहीं चलेगा।

उत्तर

13

क्या आपने AJAX के बजाय getJSON() का उपयोग करने का प्रयास किया था? यह एक क्रॉस-डोमेन अनुरोध है और आप जेसन ला रहे हैं ताकि यह शायद समस्या हो।

अब यह दोनों ब्राउज़र में काम कर रहा है:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400&callback=?",function(){ 
    alert('hi'); 
}); 
+0

"वही स्थिति getJSON विधि के साथ होती है" हां मैंने कोशिश की। – MikeJ

+0

उपरोक्त कोशिश करें। यह बेवकूफ मेरे लिए काम करता है: http://jsfiddle.net/z5b2J/7/ –

+8

(याद रखें कि आपको URL पर "& callback =?" तर्क जोड़ना है ... यह एक तरीका है, या आप 'jsonp' निर्दिष्ट कर सकते हैं आपके $ AJAX कॉल में डेटाटाइप के रूप में। –

4

$.getJSON का उपयोग करना या $.ajax आप भी dataType पैरामीटर 'jsonp'

यहाँ उदाहरण getJSON का उपयोग कर उल्लेख करना होगा:

var webpage = ".... your very long url ...."; 
var anchor = document.createElement('a'); 
anchor.href = webpage; 
// handle the multiple parameters 
anchor.search += ((anchor.search.length > 0) ? "&" : "?"); 
anchor.search += "callback=?"; 

$.getJSON(anchor.href, 'jsonp', function(data, textStatus, jqXHR){ 
    alert('hi'); 
}); 
+2

यह केवल तभी होता है जब आप वास्तव में jsonp का उपयोग कर रहे हों। – nikolasleblanc

6

समस्या आईई 9 का उन्नत कैश प्रबंधन पर निर्भर करता है।

यदि आप आईई के कैश को खाली करते हैं और AJAX अनुरोध को फिर से चलाते हैं: पहली बार काम करेगा।

इस समस्या को हल करने के लिए आपको "noStore = true" और "अवधि = 0" या समकक्ष के साथ अपनी HTTP प्रतिक्रिया भेजनी होगी।

यहां एक example in MVC है।

2

मैं = आप कॉलबैक जोड़ देते हैं तो यूआरएल

2

साथ "अवधि = 0" जोड़कर समस्या हल हो? यूआरएल में, इसे कॉलबैक = jQuery1820719005049791166_1366033695001 जैसे कुछ में बदल दिया जाएगा। यह फ़ंक्शन का नाम है और सर्वर पक्ष पर आपको इस फ़ंक्शन कॉल में अपनी जेसन एन्कोडेड ऑब्जेक्ट को लपेटना चाहिए। तो आपका प्रतिक्रिया शरीर सिर्फ {ठीक है: सत्य} नहीं होना चाहिए, लेकिन jQuery1820719005049791166_1366033695001 ({ok: true}); । यह मेरे लिए काम किया!