2011-06-22 17 views
6

मेरे पास कुछ अजाक्स कोड है जो सफारी, क्रोम और फ़ायरफ़ॉक्स में काम कर रहा है लेकिन IE9 में नहीं।यह क्रॉस-डोमेन अनुरोध अन्य ब्राउज़रों में क्यों काम करता है लेकिन IE9 नहीं?

पृष्ठ http://foo.com/test.aspx पर है और यह https://service.foo.com पर होस्ट किए गए किसी webservice पर AJAX अनुरोध कर रहा है। मैंने सोचा कि मैं किसी भी क्रॉस-डोमेन मुद्दों नहीं होगा लेकिन IE9 अवरुद्ध कर रहा है को देखते हुए ऐसा लगता है कि मुझे क्या करना :(

var tempUrl = "https://service.foo.com/dummy.svc/test?hi=bye"; 
$.get(tempUrl, "html"); 

मैं उल्लेख किया है, कोड, अन्य 3 ब्राउज़रों में काम करता है सिर्फ IE9 नहीं। । (मैं केवल IE9, नहीं IE8 या उससे अधिक के बारे में चिंतित हूँ)

मैं कुछ खुदाई किया था और MSDN पर this article में पाया गया कि कहते हैं:

क्रॉस-डोमेन अनुरोध वेब पेज और के बीच आपसी सहमति की आवश्यकता सर्वर। आपशुरू कर सकते हैंविंडो वेब ऑब्जेक्ट से XDomainRequest ऑब्जेक्ट बनाकर और किसी विशेष डोमेन से कनेक्शन खोलकर अपने वेब पेज में क्रॉस-डोमेन अनुरोध। ब्राउज़र मूल के मूल्य के साथ उत्पत्ति शीर्षलेख भेजकर डोमेन के सर्वर से डेटा का अनुरोध करेगा। यह सर्वर कनेक्शन को पूरा करेगा यदि सर्वर या तो अनुरोध पृष्ठ का सटीक URL एक्सेस-कंट्रोल-अनुमति-उत्पत्ति शीर्षलेख का जवाब देता है। यह व्यवहार वर्ल्ड वाइड वेब कंसोर्टियम (डब्ल्यू 3 सी) के वेब एप्लिकेशन वर्किंग क्लाइंट-साइड पर क्रॉस-डोमेन संचार पर समूह का मसौदा ढांचा है जो XDomainRequest ऑब्जेक्ट के साथ एकीकृत करता है, का हिस्सा भाग है।

एक्सडीआर का उपयोग करने के रास्ते से नीचे जाने से पहले मैं लोगों से बेहतर समझना चाहता था कि यह सही दृष्टिकोण है या नहीं।

  1. मेरा पेज
  2. हालत JScript कोड है कि IE9 पता लगाता है और नियमित रूप से jQuery कॉल मैं $.get साथ उपयोग कर रहा हूँ के बजाय XDR का उपयोग करता है बनाने के लिए Response.AddHeader("Access-Control-Allow-Origin", "*"); जोड़ें।

क्या मैं पूरी तरह से बंद हूं या यह इस बारे में जाने का सही तरीका है?

+0

आम तौर पर, JQuery ब्राउज़र के समान मूल प्रतिबंधों से अवगत है और उन ब्राउज़र में सीओआरएस का उपयोग करने की कोशिश नहीं करनी चाहिए जो इसका समर्थन नहीं करते हैं। क्या आप IE9 के F12 डेवलपर टूल कंसोल में स्क्रिप्ट त्रुटियां देखते हैं? – EricLaw

+0

एरिक, देव उपकरण कंसोल में कोई त्रुटि नहीं डाली गई। – TMC

उत्तर

0

इस अन्य ब्राउज़रों (जो CORS समर्थन में काम करता है -

(http://foo.com/test.aspx पर या https://service.foo.com पर वेब सेवा पर अपने पन्ने पर यह मानते हुए इसे जाने के लिए सही तरीके से, जहां Acecss-Control-Allow-Origin प्रतिक्रिया हेडर जाने करता है?)), तो आपका एसवीसी पहले से ही इसका समर्थन कर रहा है, लेकिन यह सुनिश्चित करने के लिए, फिडलर 2 का उपयोग यह देखने के लिए करें कि क्या हो रहा है।

Access-Control-Allow-Origin हेडर का अनुरोध संसाधन पर अनुरोध किया जाता है, न कि अनुरोध करने वाले पृष्ठ पर।

1

मैं बस एक ही समस्या के साथ कुश्ती।

php बैकएंड, सही माइम और हाँ,

header('Access-Control-Allow-Origin: *'); 

में लगभग * हर ब्राउज़र में काम किया - IE9 को छोड़कर।

jQuery की तरह लगता है .getJSON स्वचालित रूप से उसी डोमेन पर सेवा प्रॉक्सी बनाने के बाद यानी 9 के लिए एक्सडीआर नहीं करता है, यह काम करता है।

* लगभग - ओपेरा भी कार्य करता है।

संपादित करें: ठीक है, ओपेरा में यानी 9 जैसी ही समस्या थी। अब आकर्षक के रूप में काम करता है।

नोट: क्रोम, सफारी और फ़ायरफ़ॉक्स (3.6-5) को ACAO: * के साथ क्रॉस डोमेन अनुरोधों में कोई समस्या नहीं थी।

जो मुझे समझ में नहीं आता है क्यों है ए) माइक्रोसॉफ्ट क्रॉस डोमेन अनुरोधों के लिए एक अलग वस्तु का उपयोग करता है और बी) क्यों jquery पारदर्शी रूप से स्विच नहीं करता है (या कम से कम चयन करने का विकल्प प्रदान करता है)।

function newpostReq(url,callBack) 
{ 
    var xmlhttp; 
    if (window.XDomainRequest) 
    { 
     xmlhttp=new XDomainRequest(); 
     xmlhttp.onload = function(){callBack(xmlhttp.responseText)}; 
    } 
    else if (window.XMLHttpRequest) 
     xmlhttp=new XMLHttpRequest(); 
    else 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      callBack(xmlhttp.responseText); 
    } 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 
} 

नोट: इस प्राप्त अनुरोधों के लिए काम करता है

10

के बजाय $.ajax(), इस कस्टम कोड का उपयोग करें।

पोस्ट अनुरोध पर अनुकूल करने के लिए बदलने के निम्नलिखित लाइनों:

function newpostReq(url,callBack,data) 

डेटा जैसे पद अनुरोधों का URL इनकोडिंग मानकों है: कुंजी 1 = मान 1 & कुंजी 2 = मूल्य% 20two

xmlhttp.open("POST",url,true); 
    try{xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");}catch(e){} 
    xmlhttp.send(data); 

संक्षेप में, कनेक्शन को POST अनुरोध (लाइन 1) के रूप में खोलें, पोस्ट डेटा के urlencoded प्रकार के लिए अनुरोध हेडर सेट करें (इसे असाधारण ब्राउज़रों के लिए प्रयास करें) (लाइन 2), फिर डेटा भेजें (लाइन 3) ।

+1

यह पूरी तरह से काम करता है, धन्यवाद। –

+1

हां यह जीईटी अनुरोधों के साथ पूरी तरह से काम कर रहा है, लेकिन आईई 8 और आईई 9 – Surya

+0

में POST अनुरोधों के लिए मुझे क्या करना चाहिए यदि मैं POST अनुरोध के लिए करना चाहता हूं तो मुझे क्या करना चाहिए, मैं अपनी सेवा में सीओआरएस का उपयोग कर रहा हूं और जेएसओएन डेटा का उपयोग कर भेजना चाहता हूं आईई 8 और आईई 9 में पोस्ट अनुरोध – Surya

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