2012-02-16 17 views
11

में काम नहीं करता है मेरे पास एक स्क्रिप्ट है जो दूरस्थ सर्वर पर AJAX अनुरोध करता है, जो एक सादे पाठ प्रतिक्रिया देता है। यह आईई 8 (शॉकर) को छोड़कर सभी ब्राउज़रों में ठीक काम करता है।Jquery AJAX() क्रॉस डोमेन रिमोट सर्वर IE8

$.ajax({ 
    url: 'abc.com/?somerequest=somevalue', 
    cache: false, 
    type: 'POST', 
    data:{ 
    sub: 'uploadprogress', 
    uploadid: this.uploadId 
    }, 
    dataType: 'html', 
    success: this.uploadProgressResp, 
    error: this.errorResp 
}); 

IE8 में, यह एक "कोई परिवहन" त्रुटि देता है:

कोड यह रहा। मुझे लगता है कि ऐसा इसलिए है क्योंकि IE8 क्रॉस डोमेन अनुरोधों की अनुमति नहीं देता है?

नोट: मैंने दूरस्थ सर्वर के लिए एपीआई नहीं लिखा था। अगर मैंने किया, तो मैं एक सादा पाठ प्रतिक्रिया के बजाय JSON प्रतिक्रिया वापस कर दूंगा। तो हाँ, डेटा टाइप JSON के बजाय HTML होना चाहिए।

शेख़ी: मैं IE नफरत और इच्छा यह पृथ्वी

+0

आप JSONP करने की कोशिश की है का उपयोग करना चाहिए? –

+1

आईई 8 में [$ .ajax कॉल ठीक काम कर रहा है और फ़ायरफ़ॉक्स और क्रोम ब्राउज़र में काम नहीं करता है] के संभावित डुप्लिकेट [http: // stackoverflow।कॉम/प्रश्न/8698682/AJAX-call-working-fine-in-ie8-and-doesnt-work-in-firefox-and-chrome-browser) –

+0

@Diodeus मैंने JSONP को आजमाया है, लेकिन यह अभी भी IE8 में त्रुटियां उत्पन्न करता है। प्रतिक्रिया एक पाठ है और जेएसओएन नहीं है, इसलिए मुझे नहीं लगता कि यह उचित है। – peter

उत्तर

3
+0

दुर्भाग्यवश, मैं रिमोट सर्वर – peter

+0

से कोड या प्रतिक्रिया को परिवर्तित नहीं कर सकता अगर आप दूरस्थ सर्वर से प्रतिक्रिया को बदल नहीं सकते हैं, तो दूसरे [विस्तृत ट्यूटोरियल।] का पालन करें (http://cmsnsoftware.blogspot.com/2012/02/ कैसे-उपयोग-क्रॉस-डोमेन-AJAX-request.html # 1) यह स्पष्ट रूप से उल्लेख है कि अपने सर्वर में अपने प्रॉक्सी को कैसे सेट करें (रिमोट सर्वर नहीं) –

+0

अपने सर्वर पर प्रॉक्सी सेट करना बहुत धीमा है । आपको अपने सर्वर से गुजरना है, रिमोट सर्वर से अनुरोध करना है, प्रतिक्रिया की प्रतीक्षा करें, फिर अपनी प्रतिक्रिया दें। अनुरोध दो गुना लंबा लगता है। – peter

7

कोशिश के चेहरे से गायब हो जाएंगेajax कॉल करने से पहले यह कहीं न कहीं जोड़ने - बेस्ट जगह इसके लिए पहले किसी अन्य जावास्क्रिप्ट निष्पादित करता है!

jQuery.support.cors = true; 

इसके बिना, इंटरनेट एक्सप्लोरर द्वारा "कोई परिवहन" त्रुटि नहीं डाली जाएगी। त्रुटि संदेश स्वयं भ्रमित है, लेकिन डिफ़ॉल्ट रूप से क्रॉस-डोमेन AJAX अनुरोध IE द्वारा अवरोधित किए जाते हैं, लेकिन अन्य ब्राउज़रों द्वारा ऐसा नहीं लगता है - या कम से कम, क्रोम और फ़ायरफ़ॉक्स उस प्रभाव पर कार्य करेगा।

मैंने ऐतिहासिक रूप से इस पर आपका दर्द साझा किया। काफी विश्वास है कि यह आपकी समस्या को हल करेगा।

+6

कोड की उस पंक्ति को जोड़ने के बाद, अब मुझे "एक्सेस अस्वीकृत" त्रुटि – peter

+2

मिलती है जो मुझे आश्चर्यचकित करती है - मेरे पास "कोई परिवहन" समस्या नहीं थी और उसे तुरंत उस कोड के साथ हल किया गया। मैंने थोड़ा और खोद दिया और इस पर आया: http://stackoverflow.com/questions/5087549/access-denied-to-jquery-script-on-ie - कोई मदद? क्षमा करें, मेरा सुझाव आपके लिए काम नहीं करता है: \ – SpaceBison

+0

मुझे यह समस्या थी, क्रोम में काम किया लेकिन आईई में कोई परिवहन त्रुटि नहीं दी, स्पेसबिसन के समाधान ने मेरी समस्या हल की। मुझे सीधे AJAX कॉल के ऊपर कॉल करना पड़ा। मैंने पहली बार इसे $ (दस्तावेज़) में जोड़ने की कोशिश की। पहले से ही यह काम नहीं किया और फिर मैंने इसे सीधे AJAX कॉल के सामने जोड़ा और यह काम किया। धन्यवाद स्पेसबिसन – Lismore

0

मैं जानता हूँ कि यह बहुत पुराना सवाल है, लेकिन दुर्भाग्य से लोगों को अभी भी IE8/9 का उपयोग कर और कभी कभी हम उन्हें समर्थन करने के लिए है:/

यह सबसे अच्छा समाधान मैं कर रहा था है इस समस्या के लिए लगता है:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

बस निम्नलिखित रों शामिल

  • IE6/7 समर्थित नहीं है, केवल IE8 और: अपने html में cript और बस हो गया, तो आप अपने jQuery अनुरोध

    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>

    सीमाओं में कुछ भी संशोधित की जरूरत नहीं है IE9

  • न्यूनतम jQuery संस्करण IE8/9 में POST पद्धति का उपयोग करते समय 1.5
  • है, Content-Type हैडर हमेशा +०१२३८२८२५३ पर निर्धारित किया जाएगा
  • वर्तमान वेबसाइट और अनुरोध किया गया URL दोनों एक ही प्रोटोकॉल (HTTP-> HTTPS या HTTPS-> HTTP अनुरोध काम नहीं करेगा)