Jeg forsøger at få adgang til et script som JSON via AJAX, som fungerer fint i Safari og andre browsere, men som desværre ikke kan udføres i Chrome. Det'kommer med følgende fejl:
Refused to execute script from '*' because its MIME type ('application/json') is not executable, and strict MIME type checking is enabled.
Her er anmodningen:
$.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);
}
});
Er der nogen, der har en løsning på dette?
Ved at tilføje et callback-argument fortæller du jQuery, at du ønsker at sende en anmodning om JSONP ved hjælp af et scriptelement i stedet for en anmodning om JSON ved hjælp af XMLHttpRequest.
JSONP er ikke JSON. Det er et JavaScript-program.
Ændr din server, så den udsender den rigtige MIME-type for JSONP, som er application/javascript
.
(Mens du er i gang, skal du holde op med at fortælle jQuery, at du forventer JSON, da det er selvmodsigende: dataType: 'jsonp'
).
Hvis din proxyserver eller container tilføjer følgende header, når du serverer .js-filen, tvinger det nogle browsere som Chrome til at foretage en streng kontrol af MIME-typer:
X-Content-Type-Options: nosniff
Fjern denne header for at forhindre Chrome i at udføre MIME-kontrollen.
I mit tilfælde bruger jeg
$.getJSON(url, function(json) { ... });
til at lave anmodningen (til Flickr's API), og jeg fik den samme MIME-fejl. Som svaret ovenfor foreslog, tilføjede jeg følgende kode:
$.ajaxSetup({ dataType: "jsonp" });
løste problemet, og jeg kan ikke længere se MIME-typefejlen i Chrome's konsol.