2010-02-10 7 views
29

जब एक साइट से एक्सएमएल सामग्री प्राप्त करने की कोशिश मैं इस त्रुटिNETWORK_ERROR: XMLHttpRequest अपवाद 101

NETWORK_ERROR: XMLHttpRequest Exception 101

हो रही है। यहाँ मेरी कोड

var xmlhttp; 
if(window.XMLHttpRequest) 
     { 
      xmlhttp = new XMLHttpRequest(); 
     } 
     if (xmlhttp==null) 
     { 
      alert ("Your browser does not support XMLHTTP!"); 
      return; 
     }   

xmlhttp.onReadyStateChange=function() 
     { 
       if(xmlhttp.readyState==4) 
       { 
       var value =xmlhttp.responseXML; 
       alert(value); 
       } 
     } 
     xmlhttp.open("GET",url,false); 
     xmlhttp.send(); 
     //alert(xmlhttp.responseXML);  
    } 
xmlhttp.open("GET",url,false); 
xmlhttp.send(null); 

किसी भी एक के लिए एक समाधान है है?

+0

यह एक क्रॉस डोमेन समस्या की तरह लग रहा करने के लिए async हिस्सा सेट –

+0

कृपया उल्लेख क्या ब्राउज़र और/या मंच आप पर समस्या को देखने (मैं वेबकिट 533.1 के साथ एंड्रॉयड 2.3.7 पर अपवाद मिला – Ribo

उत्तर

2

जब मैंने गलत एक्सएमएल लौटाया तो मैंने ऐसा कुछ किया (मैंने रूट नोड में एक विशेषता डाली)। अगर यह किसी की मदद करता है।

+3

रूट नोड गलत xml में एक विशेषता कैसे है? – devios1

23

यदि आप url प्रदान करते हैं तो आप अपने सर्वर पर बाहरी रूप से स्थित हैं, और सर्वर ने आपको अनुरोध भेजने की अनुमति नहीं दी है, आपको अनुमति समस्याएं हैं। सर्वर को स्पष्ट रूप से ऐसा करने की अनुमति देने के बिना, आप XMLHttpRequest के साथ किसी अन्य सर्वर से डेटा तक नहीं पहुंच सकते हैं।

अद्यतन: यह समझना अब Google पर एक उत्तर के रूप में दिखाई देता है, मैंने इस त्रुटि पर कुछ दस्तावेज खोजने की कोशिश की। वह आश्चर्यजनक रूप से कठिन था।

This article हालांकि, कुछ पृष्ठभूमि जानकारी और हल करने के लिए कदम हैं। विशेष रूप से, यह इस त्रुटि यहाँ का उल्लेख है:

As long as the server is configured to allow requests from your web application's origin, XMLHttpRequest will work. Otherwise, an INVALID_ACCESS_ERR exception is thrown

INVALID_ACCESS_ERR का एक व्याख्या क्या हम यहाँ पर देख रहे हैं लगता है।

इसे हल करने के लिए, अनुरोध प्राप्त करने वाले सर्वर को मूल को अनुमति देने के लिए कॉन्फ़िगर किया जाना चाहिए। यह more details at Mozilla में वर्णित है।

+0

[यह पोस्ट] एक मृत लिंक है। –

+1

धन्यवाद! मृत लिंक हटा दिया गया। –

+0

किसी अन्य डोमेन/साइट पर स्थित यूआरएल आवश्यक रूप से अनुमति समस्या नहीं हैं। क्रॉस-साइट अनुरोध हो सकते हैं यदि XML सर्वर इसे अनुमति देता है तो XMLHttpRequest का उपयोग करके बनाया गया। – Ribo

4

प्रतिबंध है कि आप XMLHttpRequest के साथ किसी अन्य सर्वर से डेटा तक नहीं पहुंच सकते हैं, भले ही यूआरएल सिर्फ रिमोट सर्वर का तात्पर्य हो।

तो: url = "http://www.myserver.com/webpage.html"

विफल हो सकता है,

लेकिन: url = "/webpage.html"

सफल होने - भले ही अनुरोध www.myserver.com

+0

XMLHttpRequest का उपयोग अन्य सर्वरों से डेटा तक पहुंचने के लिए किया जा सकता है यदि लक्ष्य सर्वर इसे अनुमति देता है (साल पहले यह नहीं कर सका)। – Ribo

1

से किया जा रहा है मैं 2 विभिन्न soluti के साथ एक बहुत अच्छा लेख मिला ऑन।

  1. पहला जो jQuery और JSONP को कार्यान्वित करता है, यह बताता है कि यह कितना आसान है।
  2. दूसरा दृष्टिकोण, यह एक पीएचपी कॉल को रीडायरेक्ट कर रहा है। बहुत सरल और बहुत अच्छा।

http://mayten.com.ar/blog/42-ajax-cross-domain

0

इस समस्या को हल करने का एक और आधुनिक विधि क्रॉस उत्पत्ति Ressource शेयरिंग है। एचटीएमएल 5 इस सुविधा की पेशकश करता है। यदि लक्ष्य ब्राउज़र इस सुविधा का समर्थन करता है तो आप अपने XMLhttp अनुरोध को इस CORS_request और में "लपेटें" कर सकते हैं, आप इसका उपयोग कर सकते हैं और इसमें कोई समस्या नहीं है।

संपादित करें: Additionaly मुझे यह जोड़ना है कि इस मुद्दे का कारण बनने के कई कारण हैं। न केवल क्रॉस डोमेन प्रतिबंध बल्कि आपकी वेबसाइट के आपके WEB.CONFIG में भी गलत सेटिंग्स।

उदाहरण आईआईएस (.NET):

बाहरी स्रोतों से HTTP एक्सेस (मेरे मामले CORS अनुरोध के साथ एक संकलित Phonegap अनुप्रयोग में) सक्षम करने के लिए आप अपने web.config में जोड़ने के लिए है

<webServices> 
     <protocols> 
      <add name="HttpGet"/> 
      <add name="HttpPost"/> 
     </protocols> 
    </webServices> 

एक और परिदृश्य:

मुझे दो वेबसाइसेस चल रहे हैं ... पोर्ट 80 पर एक और पोर्ट 90 पर एक। यह मुझे एक एक्सएमएल HTTP अनुरोध त्रुटि भी प्रदान करता है। मैं भी नहीं जानता क्यों :)। फिर भी मुझे लगता है कि यह कई अनुभवी पाठकों की मदद कर सकता है।

2

अनुरोध निरस्त कर दिया गया क्योंकि यह कैश किया गया था या पहले अनुरोध किया गया था? ऐसा लगता है कि XMLHttpRequest Exception 101 त्रुटि कई कारणों से फेंक दी जा सकती है। मैंने पाया है कि यह तब होता है जब मैं एक ही URL के साथ एक ही समय में एक XMLHttpRequest भेजता हूं। (यूआरएल के अंत में बकवास स्ट्रिंग को हराकर कैश को जोड़कर यूआरएल को बदलना अनुरोध को दोहराने की अनुमति देता है। - मैं अनुरोध दोहराने का इरादा नहीं रखता था, लेकिन कार्यक्रम में घटनाओं के कारण यह हुआ और इसके परिणामस्वरूप यह अपवाद हुआ)।

सही प्रतिक्रिया नहीं लौटा रहा है बार-बार अनुरोध की स्थिति में टेक्स्ट या प्रतिक्रिया xML एक बग (शायद वेबकिट) है।

जब यह अपवाद हुआ, तो मुझे readyState == 4 और अनुरोध ऑब्जेक्ट स्थिति = 0 और प्रतिक्रिया टेक्स्ट == "" और प्रतिक्रिया xML == null के साथ एक अधिभार ईवेंट मिला। यह एक क्रॉस डोमेन अनुरोध था, जिसे सर्वर अनुमति देता है।

यह एक Android 2.3.5 प्रणाली का उपयोग करता है जो वेबकिट/533,1

किसी को क्या अपवाद मतलब माना जाता है पर दस्तावेज पर था?