IE में 'नो ट्रांसपोर्ट' एरर w / jQuery का अजाक्स कॉल


110

मुझे स्थानों की खोज करने के लिए फोरस्क्वेयर एपीआई का उपयोग करना होगा। बेशक यह क्रॉस-डोमेन है।

फ़ायरफ़ॉक्स में इसकी कोई समस्या नहीं है लेकिन इंटरनेट एक्सप्लोरर (7, 8, 9 मैंने परीक्षण किया है)।

मेरा जावास्क्रिप्ट कोड इस तरह दिखता है:

searchVenues: function(searchQuery) {
    $.ajax({
       url: 'https://api.foursquare.com/v2/venues/search',
       data: {
            sw: bound_south_west,
            ne: bound_north_east,
            query: searchQuery.query,
            oauth_token: FSQ_OAUTH_TOKEN,
            limit: 25,
            intent: 'browse',
            v: 20120206
       },
       cache: false,
       dataType: 'json',
       success: function(data) {
           displayResults(data, searchQuery.query);
       },
       error: function(xhr, status, errorThrown) {
           console.log(errorThrown+'\n'+status+'\n'+xhr.statusText);
       }
    });
}

फ़ायरफ़ॉक्स में, यह पूरी तरह से प्राप्त आंकड़ों को प्रदर्शित करता है। Internet Explorer में, यह कंसोल पर लॉग करता है:

No Transport
Error
Error

मुझे क्या करना चाहिए?


जवाबों:


265

मैंने विंडोज मोबाइल 7 पर इसका परीक्षण किया।

बहुत समय बीतने के बाद, मैंने आखिरकार यह पाया:

http://bugs.jquery.com/ticket/10660

समाधान सरल है, बस इसे निर्धारित करें:

$.support.cors = true;

और Ajax क्रॉस डोमेन अनुरोध काम करेंगे!


47
मुझे IE8 और IE9 पर 'त्रुटि: प्रवेश निषेध है' के रूप में अच्छी तरह से मिल रहा है
डैरेन कॉनी

1
यह थोड़ा हतोत्साहित करने वाला है कि स्वीकृत उत्तर वास्तव में IE8 या IE9 पर समस्या को हल नहीं करता है।
वॉरेन रुमक

2
मेरा भी वही मुद्दा है। IE10 में काम करता है लेकिन IE8 या IE9 में नहीं
मिशका

7
मुझे "त्रुटि: प्रवेश निषेध है" भी मिला, मेरी गलती यह थी कि मैंने HTTP डोमेन से HTTPS सामग्री खींची। सुनिश्चित करें कि आपकी वेबसाइट और आपके ajax लक्ष्य एक ही प्रोटोकॉल (या तो HTTP या HTTPS) का उपयोग करें
Torben

2
मेरा मानना ​​है कि यह अब डिफ़ॉल्ट रूप से सेट है। मेरे लिए समाधान एक XDR अनुरोध परिवहन था - यह लोकप्रिय उत्तर देखें: stackoverflow.com/a/10232313/217866
jackocnr

13
jQuery.support.cors = true;

$.ajax({
  crossDomain: true,
  url: "",
  type: "POST",
  dataType: "xml",
  data: soapMessage,
});

आपको क्रॉस डोमेन मान को सही बनाने की आवश्यकता है


8
आपके उत्तर और स्वीकृत एक के बीच अंतर क्या है, जो आपके कुछ समय पहले पोस्ट किया गया था?
javanna

2
@javanna crossDomain: trueविकल्प तर्क के अलावा।
क्रिस मरास्टी-जार्ज

8
क्रॉस डोमेन क्या है और इसे सही होने की आवश्यकता क्यों है?
अजीज सालेह

आपको इसकी आवश्यकता नहीं है crossDomain: trueकि $.support.corsअगर मैं गलत नहीं हूँ तो डिफ़ॉल्ट रूप से क्या होता है
मार्क पीज़ाक - ट्रिलोन। २१

7

यह समस्या पिछले कुछ समय से मुझे परेशान कर रही है। वर्कअराउंड के रूप में मैं उसी साइट पर स्थित प्रॉक्सी स्क्रिप्ट का उपयोग करता हूं। इस तरह की स्क्रिप्ट बस सर्वर-टू-सर्वर नॉन-अजाक्स HTTP अनुरोध (कर्ल और WinHttp.WinHttpRequest के बारे में सोचते हैं) और कॉल करने वाले को वापस स्थिति और डेटा निष्पादित करते हैं। यह काम करता है, लेकिन स्पष्ट रूप से बहुत कुशल नहीं है क्योंकि इसे दो HTTP अनुरोध करने हैं।

मेरे मामले में, समाधान ऊपर वर्णित सभी चीजों का एक संयोजन है, जो 'एक्सेस-कंट्रोल-कंट्रोल-ऑल-ओरिजिन' हेडर है।

$.support.cors = true; // this must precede $.ajax({}) configuration

$.ajax({
  crossDomain: true, // added in jQuery 1.5
  headers: {
    'Access-Control-Allow-Origin': '*'
  },
  ...
});

इन कॉल्स का जवाब देने वाली वेब सेवा 'एक्सेस-कंट्रोल-अलाउंस-ओरिजिन: *' हेडर के साथ भी जवाब देती है।


4
... और फिर भी यह एक पहला उत्तर है जो कॉर्स हेडर का उल्लेख करता है। स्वीकृत समाधान मेरे काम नहीं आया।
सीनहेड्स

2
मुझे लगता है कि यह सेवा के web.config में होना चाहिए।
फजोड्र

6

इस समाधान का प्रयास करें:

https://stackoverflow.com/a/14463975/237091

या, सीधे jquery को शामिल करने के बाद इस कोड को अपने HTML में डालें।

<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->

मुझे एंड्रॉइड पर क्रोम (और संभवतः एंड्रॉइड ब्राउज़र) में होने वाली समान समस्या मिली, इसलिए शायद सभी स्क्रिप्ट को इस स्क्रिप्ट का उपयोग करने की अनुमति देने के लिए सशर्त टिप्पणी छोड़ दें। (प्रोजेक्ट होम पेज यहां है: github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest )
डेव बर्ट

1
इसने मेरे लिए काम किया। यह सुनिश्चित करने के अलावा कि रिस्पांस कंटेंट-टाइप 'टेक्स्ट / प्लेन' है
निकोले मेलनिकोव

मैंने इसे जंकरी के बाद ग्रंट में जोड़ा और अब यह काम करता है ( npmjs.com/package/jquery-ajax-transport-xdomainrequest )।
Tobias47n9e

0

मैंने सिर्फ jquery संस्करण को बदल दिया और CDN लिंक को बदल दिया और यह काम कर गया! बस अगर यह crossDomain:trueऔर $.support.cors= सच नहीं काम करते हैं।

<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.