वेब सेवा के लिए jQuery कॉल "नो ट्रांसपोर्ट" त्रुटि देता है


163

मेरे पास निम्नलिखित वेब सेवा है;

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

यह वर्ग सज्जाकारों के लिए कोई परिवर्तन के साथ स्टॉक मानक है।

मेरे पास यह jQuery विधि है;

var webMethod = "http://localhost:54473/Service1.asmx/HelloWorld"; 

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: "{}",  
    dataType: "json",
    url: webMethod,
    success: function(msg){ alert(msg.d); },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(errorThrown);
          }
});

यह एक पोस्ट एक्शन है क्योंकि बाद में मुझे इसे डेटा पोस्ट करने की आवश्यकता है।

जब मैं jQuery को निष्पादित करता हूं तो मुझे "नो ट्रांसपोर्ट" त्रुटि मिलती है।

एक बात मुझे यह भी बतानी चाहिए कि jQuery मेरी मशीन पर एक साधारण HTML फ़ाइल में संग्रहीत है और WebService मेरी मशीन पर भी चल रही है।

HTML पेज पर कोई कोड नहीं है यह केवल एक वेब पेज है और एसी # प्रोजेक्ट या कुछ भी नहीं है।

क्या कोई मुझे यहाँ सही दिशा में इंगित कर सकता है?


क्या आप केवल ब्राउज़र का उपयोग करके अपनी वेब सेवा प्राप्त कर सकते हैं?
अवितस

क्षमा करें, मैंने यह नहीं देखा कि यह एक अलग पोस्ट है (मैंने इस पोस्ट को संपादित किया, यह सोचते हुए कि यह मेरी अपनी थी), मैंने हाइपरलिंक को अपने स्वयं के पोस्ट में क्लिक किया होगा। सच तो पोस्ट के स्वामी = \ करने के लिए माफी
एरिक गार्सिया

$ .support.cors = true; यदि आपका समापन बिंदु कॉर्स सक्षम है (यह एक्सेस-कंट्रोल-अनुमति-मूल हेडर, आदि के साथ सही तरीके से प्रतिक्रिया करता है), तो कोड की यह लाइन IE8 को IE में क्रॉस मूल अनुरोध करने के लिए राजी करेगी। मैं अभी पहले इस में भाग गया था, उम्मीद है कि यह आप में से कुछ समय और सिरदर्द को बचाएगा।
जेरेमी हर्ट

जवाबों:


95

यदि आपका jQuery पृष्ठ लोड नहीं किया जा रहा है, http://localhost:54473तो यह समस्या संभवतः इसलिए है क्योंकि आप क्रॉस-डोमेन अनुरोध करने का प्रयास कर रहे हैं।

अपडेट 1 इस ब्लॉग पोस्ट पर एक नज़र डालें ।

अद्यतन 2 यदि यह वास्तव में समस्या है (और मुझे संदेह है), तो आप JSONP को एक समाधान के रूप में देखना चाहेंगे। यहां कुछ लिंक दिए गए हैं जो आपको आरंभ करने में मदद कर सकते हैं:


4
हाँ, यह शायद सुरक्षा के साथ कुछ करना है।
तत्कालीन मारग

3
यह लोकलहोस्ट होना जरूरी नहीं है: 54473, इसे बस एक ही डोमेन होना चाहिए।
jcolebrand

7
@drachenstern एचएम, मैंने हमेशा सोचा है (और हमेशा पढ़ने के लिए याद रखने के लिए लगता है) कि योजना, मेजबान और बंदरगाह समान होने की आवश्यकता है। यह और यह और यह सोचने का मेरे तरीके का समर्थन करता है कि एक ही डोमेन का गठन क्या होता है।
no.good.at.coding 4

@drachenstern मदद की खुशी! यह सब वेब सामग्री मुश्किल है - हर रोज सीखने के लिए कुछ नया :)
no.good.at.coding

1
@griegs सुनने में अच्छा है लेकिन ध्यान दें कि आप वास्तव में समस्या को हल नहीं कर रहे हैं-यह केवल तभी काम करेगा जब पर्यावरण क्रॉस-डोमेन अनुरोधों की अनुमति देता है क्योंकि आप केवल उस सुरक्षित-गार्ड को हटा रहे हैं जो jQuery डालता है। यदि आपका ब्राउज़र इसकी अनुमति नहीं देता है, तो यह संपत्ति सेट करना आपके लिए कुछ नहीं करेगा। मैं JSONP को जगह पाने के लिए अब थोड़ा सा प्रयास करने की सलाह दूंगा। बहुत कम से कम, आप कोशिश करना चाहते हैं और देख सकते हैं कि मजबूरन jQuery क्रॉस-डोमेन समर्थन उन सभी ब्राउज़रों के साथ काम करता है जिन्हें आप समर्थन करते हैं। मैं यह भी टिप्पणी नहीं कर सकता कि आप बाद में किन अन्य समस्याओं में भाग सकते हैं!
no.good.at.coding

253

इसे जोड़ो: jQuery.support.cors = true;

यह jQuery में क्रॉस-साइट स्क्रिप्टिंग सक्षम करता है (1.4x के बाद पेश किया गया, मुझे विश्वास है)।

हम jQuery के एक बहुत पुराने संस्करण (1.3.2) का उपयोग कर रहे थे और इसे 1.6.1 के लिए स्वैप किया। .Ajax () कॉल को छोड़कर सब कुछ काम कर रहा था। उपरोक्त लाइन को जोड़ने से समस्या ठीक हो गई।


यहाँ थोड़ी अधिक जानकारी: blueonionsoftware.com/…
एंड्रयू

14
यह मेरी समस्या को ठीक करता है, क्रोम और फ़ायरफ़ॉक्स में काम किया है लेकिन आईई नहीं। इसे मेरी स्क्रिप्ट के शीर्ष पर जोड़ा गया और सब अच्छा था
पीटर

@SrBlanco यह मेरी प्रोब को भी ठीक करता है, इस जानकारी को साझा करने के लिए धन्यवाद।
देव

4
बहुत अच्छा ठीक है, मुझे इंटरनेट एक्सप्लोरर 9 पर एक ही समस्या थी जब मैं एक रिश्तेदार मार्ग का उपयोग करके एक ही डोमेन से एक kml फ़ाइल का अनुरोध कर रहा था ... IE का रहस्य ...
Matteo Conta

धन्यवाद। हां, 1.5 jquery अपडेट के बाद मेरे बाकी कॉल बंद हो गए। इस कोड ने इसे ठीक कर दिया।
अशरफ

26

मुझे एक पृष्ठ पर एक ही त्रुटि मिली, और मैंने इन पंक्तियों को जोड़ा:

<!--[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]-->

और यह अंततः मेरे लिए काम करता है;) IE9 में कोई और त्रुटि नहीं।


6
Github प्रोजेक्ट: github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest और XDomainRequest जानकारी: blogs.msdn.com/b/ieinternals/archive/2010/05/13/… । मूल रूप से, IE8 और IE9 XMLHttpRequest ऑब्जेक्ट पर CORS का समर्थन नहीं करते हैं। आपको इसके बजाय XDomainRequest ऑब्जेक्ट का उपयोग करने के लिए मजबूर किया जाता है (जो अधिक सीमित है। दूसरी लिंक पर जानकारी पढ़ सकते हैं)।
ऋचाध्याय

7

प्रस्तावित जवाबों में से किसी ने भी मेरे लिए पूरी तरह से काम नहीं किया। मेरा उपयोग मामला थोड़ा अलग है (ajax कर रहा है एक s3 .json फ़ाइल IE9 में)। सेटिंग jQuery.support.cors = true;में No Transportत्रुटि से छुटकारा मिल गया लेकिन मैं अभी भी प्राप्त कर रहा थाPermission denied त्रुटियां हो थीं।

मेरे लिए क्या काम था jQuery-ajaxTransport-XDomainRequest का उपयोग IE9 को XDomainRequest का उपयोग करने के लिए मजबूर करने के लिए। इसका उपयोग करने के लिए सेटिंग की आवश्यकता नहीं थीjQuery.support.cors = true;


6

मैं डेटा टाइप = 'jsonp' के स्थान पर dataType = 'jsonp' का उपयोग करके इसे हल करता हूं


2
FYI करें, यह वास्तव में मूल पोस्टर के अनुरोध के लिए काम नहीं करेगा क्योंकि jsonp POST क्रिया का समर्थन नहीं करता है, केवल GET।
डैनियल कॉक्स

हाँ, ठीक है, मैं इसे fbwall, google + आदि के फ़ीड के लिए इस्तेमाल करता हूँ ajax का उपयोग कर
अभिषेक

मैं अभी भी +1 देने जा रहा हूं क्योंकि इससे मेरे उपयोग में मदद मिली, धन्यवाद।
मैनथरीन

0

मुझे भी यह समस्या हुई और ऊपर दिए गए सभी समाधान या तो विफल रहे या ग्राहक webservice प्रतिबंध के कारण लागू नहीं हुए।

इसके लिए, मैंने अपने पेज में एक iframe जोड़ा, जो क्लाइंट के सर्वर में रहता था। इसलिए जब हम अपने डेटा को iframe और iframe में पोस्ट करते हैं, तब इसे webservice पर पोस्ट करते हैं। इसलिए क्रॉस-डोमेन संदर्भ को समाप्त कर दिया जाता है।

हमने iframe से और केवल अधिकृत पृष्ठ पोस्ट डेटा की पुष्टि करने के लिए 2-तरफ़ा मूल चेक जोड़ा।

आशा करता हूँ की ये काम करेगा

<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
 </iframe>

//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');

//The iframe receives the data using the code:
window.onload = function () {
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    eventer(messageEvent, function (e) {
        var origin = e.origin;
        //if origin not in pre-defined list, break and return
        var messageFromParent = JSON.parse(e.data);
        var json = messageFromParent.data;

        //send json to web service using AJAX   
        //return the response back to source
        e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
    }, false);
}

0

मेरे लिए यह एक पूरी तरह से अलग कहानी है।
चूंकि इस पृष्ठ की अच्छी खोज इंजन रैंकिंग है, इसलिए मुझे अपना मामला और समाधान यहां भी जोड़ना चाहिए।

मैंने केवल jqueryअपने द्वारा webpackउपयोग किए जा रहे मॉड्यूल को चुनने के साथ खुद को बनाया । एकमात्र सुराग के रूप में "नो ट्रांसपोर्ट" संदेश के साथ अजाक्स हमेशा विफल रहता है।

एक लंबी डीबगिंग के बाद, समस्या यह हो सकती है XMLHttpRequestकि इसमें प्लग करने योग्य है jqueryऔर यह डिफ़ॉल्ट रूप से शामिल नहीं है।

jquery/src/ajax/xhrब्राउज़रों में ajax को काम करने के लिए आपको फ़ाइल को स्पष्ट रूप से शामिल करना होगा।


-1

मैंने इसे केवल आग्रह URL से डोमेन हटाकर हल किया है।

Before: https://some.domain.com/_vti_bin/service.svc

After: /_vti_bin/service.svc

1
हां, jQuery के एक ही-डोमेन ajax अनुरोध जहां URL url में निर्दिष्ट नहीं है। मेरे मामले में, मुझे एक क्रॉस-साइट अनुरोध करने की आवश्यकता नहीं थी और ऐसा लगता है कि डोमेन ने ajax अनुरोध के url पैरामीटर में होने से अनुरोध किया है कि किसी तरह क्रॉस-साइट'श का व्यवहार करें। मेरा वातावरण कुछ पुनर्निर्देशित नियमों के साथ Microsoft फ़ोरफ़्रंट का उपयोग करता है और यह संभव है कि यह मुद्दों का कारण बन सकता है।
ड्रैगहोन

फिर आप क्रॉस डोमेन अजाक्स अनुरोध के बारे में सवाल का जवाब क्यों दे रहे हैं
नईम शेख

1
@ NaeemShaikh27, अनुरोध की प्रकृति (क्रॉस-डोमेन बनाम समान-डोमेन) ओपी से स्पष्ट नहीं थी; मैं प्रश्न में "स्पष्ट" मापदंडों को देखते हुए प्रश्न को संबोधित कर रहा था। भले ही, मैं बस कह रहा हूं "अरे, मुझे वही त्रुटि मिली, यहां मैंने क्या किया" और आपको यह पसंद है या नहीं (या यह एसओ के लिए उपयुक्त है या नहीं), इसने मेरे लिए काम किया। अब, यदि आप वापस जाते हैं और प्रश्न को अधिक विशिष्ट बनाते हैं, तो क्या मेरी प्रतिक्रिया पूरी तरह से अप्रासंगिक होगी।
ड्रेगन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.