' 'Access-Control-Allow-Origin' Başlığı istenen kaynak mevcut.&jQuery xml hatası#039;
Üzerinde çalışıyorum, bu kişisel proje, sadece benim için eğlenceli bir yerde okumak istiyorum bir xml dosyası bulunan http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml ve ayrıştırma xml ve kullanmak için dönüştürmek değerleri arasında para.
Şu ana kadar xml okumak için çok basit olan kodu aşağıda yaptım ama aşağıdaki hatayı alıyorum.
XMLHttpRequest yükleyemiyor**. Hayır 'Access-Control-Köken İzin Ver' başlık istenen kaynak mevcut. Kökeni '31* *' Bu nedenle erişim izin verilmez.
$(document).ready(
function() {
$.ajax({
type: 'GET',
url: 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml',
dataType: 'xml',
success: function(xml){
alert('aaa');
}
});
}
);
Birisi tamir edebilirim nasıl benim kod yanlış yapıyorum ne işaret edebilir umuyorum ki bir şey benim koduyla yanlış göremiyorum.
CEVAP
Bir dosya http://run.jsbin.com
dağıtılmış http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
URL erişmek mümkün same-origin policy bağlı olmayacak.
Kaynak (akakökenli) sayfa vehedefURL farklı etki alanları (run.jsbin.com
www.ecb.europa.eu
), kodunuzu aslında bir haline getirmeye çalışıyorCross-domain (CORS)istek, GET
sıradan değil.
Birkaç kelime,aynı kaynak politikasıbu tarayıcılar sadece hizmet için Ajax çağrıları izin zorlaraynı etki alanıHTML sayfası olarak.
Örnek:
http://www.example.com/myPage.html
bir sayfa sadece doğrudan http://www.example.com/api/myService
http://www.example.com
, bu hizmetleri talep edebilirler. Eğer hizmet diğer etki alanı (http://www.ok.com/api/myService
) söylemek ise, tarayıcı düzenli aramasını beklediğiniz gibi) yapmaz. Bunun yerine, bir İSTASYONDAN bir istek yapmak için çalışacağız.
Özetle, bir (İSTASYONDAN) gerçekleştirmek için farklı etki alanları arasında*
, tarayıcı isteği:
- Özgün istek (değer olarak sayfanın etki alanı)
Origin
Bir Başlık ve her zamanki gibi yapacak - Ve sonrasadece eğersunucuyanıtbu istek bir İSTASYONDAN isteği izin adequate headers (
Access-Control-Allow-Origin
is one of them) içerir, göz atın çağrısı (HTML sayfasının aynı etki altında neredeyse**
tam olarak yaptığınız şekilde) tamamlayacak.- Eğer beklenen başlıklar gel eğer doğru değilse, tarayıcı sadece PES sana yaptığı gibi).
*
yukarıdaki adımları gösteriyorbasitistek, hiçbir fantezi başlıkları GET
düzenli gibi. Eğer istek çok basit (gibi POST
application/json
içerik türü), tarayıcı olur dur bir an ve daha önce yerine getiren, ilk gönderme OPTIONS
istek için hedef URL. Yukarıdaki gibi, sadece OPTIONS
bu isteğe yanıt KÖŞELERİ başlıkları içeriyorsa devam edecek. OPTIONS
bu çağrı olarak bilinirön kontrolistek.
**
diyorumneredeysedüzenli aramalar ve KÖŞELERİ aramalar arasında başka farklılıklar da var çünkü. Çok önemli bir cevap mevcut olsa da, bazı başlıklar, 35 ** başlık olacak.
Nasıl çözmek için?
Başlıkları ekleyin.KÖŞELERİ etkinleştirmek için basit bir şekilde, gerekli başlıklar (Access-Control-Allow-Origin
) sunucu yanıt ekliyor. (Her sunucu/dil bunu yapmak için bir yol vardır.)
Sadece bir yazım hatası mı?Bazen JavaScript kodu hedef etki alanında sadece bir yazım hatası var. Kontrol ettiniz mi? Eğer sayfa www.example.com
ise www.example.com
düzenli aramalar yapacak! Diğer URL, api.example.com
example.com
www.example.com:8080
olarak kabul edilirfarklıtarayıcı tarafından etki! Eğer port farklı ise evet, o zaman farklı bir etki!
Son çare:Eğer sunucu tarafında hizmetine erişimi yok eğer değil, aynı zamanda (araçlar gibi . yansıtabilirsiniz ^em>ters vekillerve gerekli başlıkları orada yer alır.
Hayır 'Access-Control-Allow-Origi...
&; 'Access-Control-Allow-Origin&#...
Access-Control-Allow-Origin Google API...
Access-Control-Allow-Origin Origin Bir...
Nasıl bir Access-Control-Allow-Origin ...