जावास्क्रिप्ट से क्रॉस साइट XMLHttpRequest यह किया जा सकता है?डोमेन पर XMLHttpRequest का उपयोग करना संभव है
मैं सीमाओं को समझते हैं और क्यों यह आम तौर पर काम करने में सक्षम नहीं है, लेकिन Firefox 3.5 के रूप में वहाँ
Access-Control-Allow-Origin: *
जो इस काम करने के लिए अनुमति देने के लिए आते है।
यह ब्राउज़र को बताता है कि सर्वर को उस डोमेन से अनुरोध भेजा जाता है जो पृष्ठ की सेवा नहीं करता है।
मैं जिस कोड का उपयोग कर रहा हूं वह नीचे है।
function sendData(webservicePayload, callbackFunction) {
var request = null;
if (!window.XMLHttpRequest) { // code for IE
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (E) {
return 'Create XMLHTTP request IE';
}
}
} else { // code for Mozilla, etc.
request = new XMLHttpRequest();
}
/*
* Setup the callback function
*/
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status < 300) {
eval(callbackFunction);
}
};
if (!request) {
nlapiLogExecution('ERROR', 'Create XMLHTTP request', 'Failed');
return;
}
/*
* Setup the request headers
*/
request.open('POST','http://www.another.domain.co.uk/webservice.asmx', true);
request.setRequestHeader('Man','POST http://www.another.domain.co.uk/webservice.asmx HTTP/1.1');
request.setRequestHeader('MessageType', 'CALL');
request.setRequestHeader('Content-Type', 'text/xml; charset="utf-8"');
request.setRequestHeader('Cache-Control', 'no-cache');
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.setRequestHeader('SOAPAction','http://www.another.domain.co.uk/WebService/eService');
request.send(webservicePayload);
}
यह सही अनुरोध हेडर
अनुरोध
OPTIONS /webservice.asmx HTTP/1.1
Host: www.another.domain.co.uk
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: https://my.domain.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: cache-control,content-type,man,messagetype,soapaction
Pragma: no-cache
Cache-Control: no-cache
भेजने और एक उम्मीद प्रतिक्रिया हेडर
प्रतिक्रिया
HTTP/1.1 403 Forbidden
Server: Microsoft-IIS/5.1
Date: Wed, 14 Dec 2011 13:43:27 GMT
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Connection: close
Content-Type: text/html
Content-Length: 44
जैसा कि आप देख सकते हैं कि ऑर्गिन अनुरोध में निर्दिष्ट है और सर्वर किसी भी ("*") डोमेन की स्वीकृति के साथ प्रतिक्रिया देता है।
मुझे "निषिद्ध 403" क्यों मिल रहा है क्योंकि मुझे लगता है कि मैंने जो कुछ भी किया है वह सही है, मैं क्यों काम नहीं कर सकता?
क्या कोई और यह प्राप्त कर रहा है?
क्या आप जानते हैं कि इसका कारण क्या है?
ब्राउज़र, सभी ब्राउज़रों CORS – Raynos
का समर्थन नहीं और IE के लिए आप की जरूरत है:
आप preflight अनुरोध और हैंडलिंग CORS अनुरोधों के बारे में अधिक सीख सकते हैं: वास्तविक अनुरोध पर, आप केवल निम्नलिखित हेडर की जरूरत है XMLHTTPRequest के बजाय XDomainRequest का उपयोग करें।लेकिन हां, क्रॉस डोमेन एक्सएचआर बहुत अच्छी तरह से काम करता है, उदाहरण के लिए मैं अपनी साइट से imgur को डेटा भेजने के लिए इसका उपयोग करता हूं। मैं गंदा विवरणों को दूर करने के लिए एक पुस्तकालय का उपयोग करने की सलाह देता हूं। –
जेएस/ब्राउज़र समस्या की तुलना में सर्वर समस्या की तरह लगता है। आपको एपीएस कोड की जांच करें जो एक विकल्प अनुरोध सही तरीके से संभालती है। – Gerben