javascript - Chrome, yanlış MIME türü nedeniyle bir AJAX betiğini çalıştırmayı reddediyor
Bir betiğe AJAX ile JSON olarak erişmeye çalışıyorum, bu Safari ve diğer tarayıcılarda sorunsuz çalışıyor ama maalesef Chrome'da çalışmıyor. Aşağıdaki hata ile geliyor:
'*' adresinden gelen betik yürütülmesi reddedildi çünkü MIME türü ('application/json') yürütülebilir değil ve sıkı MIME türü denetimi etkin.
İşte talep:
$.ajax({
url: "http://some_url/test.json?callback=?",
type: "GET",
dataType: 'json',
cache: true,
success: function (data, status, error) {
console.log('success', data);
},
error: function (data, status, error) {
console.log('error', data, status, error);
}
});
Bunun için bir çözüm yolu bilen var mı?
Cevap #1
Bir callback argümanı ekleyerek, jQuery'e JSON için XMLHttpRequest kullanmak yerine bir script elementiyle JSONP isteği yapmak istediğinizi söylüyorsunuz.
JSONP JSON değildir. Bu bir JavaScript programıdır.
Sunucunuzu, JSONP için doğru MIME türünü application/javascript olarak çıkartacak şekilde değiştirin.
(Bunu yaparken, jQuery’ye JSON beklediğinizi söylemeyi bırakın çünkü bu çelişkili olur: dataType: 'jsonp').
Cevap #2
Proxy sunucunuz veya kapsayıcınız .js dosyasını sunarken aşağıdaki başlığı eklerse, bu durum Chrome gibi bazı tarayıcıların MIME türlerini sıkı bir şekilde kontrol etmesini zorlayacaktır:
X-Content-Type-Options: nosniff
Chrome'un MIME denetimini yapmasını önlemek için bu başlığı kaldırın.
Cevap #3
Bilginize, Chrome konsolundan aynı hatayı aldım. Hatanın AJAX fonksiyonumdan kaynaklandığını düşündüm, ama sıkıştırılmış scriptimi /javascripts/ajax-vanilla.min.js yerine /javascripts/ajax-vanilla.js olarak yorum satırından çıkardım. Ama gerçekte kaynak dosya /javascripts/src/ajax-vanilla.js konumundaydı. Bu yüzden Chrome’da dosya bulunamasa bile kötü MIME tipi hatası alırsınız. Bu durumda, hata mesajı text/plain kötü MIME tipi olarak tanımlanıyor.
