Es mēģinu piekļūt skriptu kā JSON, izmantojot AJAX, kas darbojas labi Safari un citās pārlūkprogrammās, bet diemžēl netiek izpildīts pārlūkprogrammā Chrome. Tiek pieļauta šāda kļūda:
Atteikts izpildīt skriptu no '*', jo tā MIME tips ('application/json') nav izpildāms, un ir iespējota stingra MIME tipa pārbaude.
Lūgums ir šāds:
$.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);
}
});
Vai kādam ir kāds risinājums?
Pievienojot atsaukšanas argumentu, jūs norādāt jQuery, ka vēlaties veikt JSONP pieprasījumu, izmantojot skripta elementu, nevis JSON pieprasījumu, izmantojot XMLHttpRequest.
JSONP nav JSON. Tā ir JavaScript programma.
Mainiet serveri tā, lai tas izvadītu pareizo MIME tipu JSONP, kas ir application/javascript
.
(Ja jau jūs to darāt, pārtrauciet norādīt jQuery, ka sagaidāt JSON, jo tas ir pretrunīgi: dataType: 'jsonp'
).
Ja jūsu starpniekserveris vai konteiners, apkalpojot .js failu, pievieno šādu galveni, tas liks dažām pārlūkprogrammām, piemēram, Chrome, veikt stingru MIME tipu pārbaudi:
X-Content-Type-Options: nosniff
Noņemiet šo galveni, lai novērstu to, ka Chrome veic MIME pārbaudi.
Manā gadījumā es izmantoju
$.getJSON(url, function(json) { ... });
lai veiktu pieprasījumu (uz Flickr API), un es saņēmu to pašu MIME kļūdu. Tāpat kā atbildē iepriekš ieteikts, pievienojot šādu kodu:
$.ajaxSetup({ dataType: "jsonp" });
Problēma tika novērsta, un Chrome konsolē vairs neredzu MIME tipa kļūdu.