SORU
6 Kasım 2013, ÇARŞAMBA


' '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
6 Kasım 2013, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Jonah Penna

    Jonah Penna

    11 EYLÜL 2005