it-swarm.com.de

Chrome weigert sich aufgrund eines falschen MIME-Typs, ein AJAX -Skript auszuführen

Ich versuche, über AJAX auf ein Skript als JSON zuzugreifen, das in Safari und anderen Browsern einwandfrei funktioniert, in Chrome jedoch leider nicht ausgeführt wird. Es kommt mit folgendem Fehler:

Es wurde abgelehnt, ein Skript von '*' auszuführen, da sein MIME-Typ ('application/json') nicht ausführbar ist und die strikte Überprüfung des MIME-Typs aktiviert ist.

Hier ist die Anfrage:

$.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);
    }
});

Hat jemand eine Problemumgehung dafür?

141
Paul Nelligan

Durch Hinzufügen eines Rückrufarguments teilen Sie jQuery mit, dass Sie eine Anforderung für JSONP mithilfe eines Skriptelements anstelle einer Anforderung für JSON mithilfe von XMLHttpRequest senden möchten.

JSONP ist kein JSON. Es ist ein JavaScript-Programm.

Ändern Sie Ihren Server so, dass er den richtigen MIME-Typ für JSONP ausgibt, nämlich application/javascript.

(Wenn Sie gerade dabei sind, hören Sie auf, jQuery mitzuteilen, dass Sie JSON erwarten, da dies widersprüchlich ist: dataType: 'jsonp').

69
Quentin

Wenn Ihr Proxyserver oder Container beim Bereitstellen der .js-Datei den folgenden Header hinzufügt, werden einige Browser wie z. B. Chrome gezwungen, eine strenge Überprüfung der MIME-Typen durchzuführen:

X-Content-Type-Options: nosniff

Entfernen Sie diesen Header, um zu verhindern, dass Chrome die MIME-Prüfung durchführt.

54
Tom Chamberlain

Zu Ihrer Information, ich habe den gleichen Fehler von der Chrome Konsole. Ich dachte, dass meine AJAX -Funktion es verursacht, aber ich habe mein minimiertes Skript von /javascripts/ajax-Vanilla.min.js auf /javascripts/ajax-Vanilla.js kommentiert. In Wirklichkeit lag die Quelldatei jedoch bei /javascripts/src/ajax-Vanilla.js. In Chrome erhalten Sie einen fehlerhaften MIME-Typ, selbst wenn die Datei nicht gefunden werden kann. In diesem Fall wird die Fehlermeldung als text/plain ungültiger MIME-Typ beschrieben.

10
Lanti

Ich bin auf diesen Fehler gestoßen, indem ich IIS 7.0 mit einer benutzerdefinierten 404-Fehlerseite verwendet habe, obwohl ich vermute, dass dies mit jeder 404-Seite passieren wird. Der Server hat eine HTML 404-Antwort mit dem MIME-Typ text/html zurückgegeben, die nicht (richtig) ausgeführt werden konnte.

1
James Westgate

Für die Datensatz- und Google-Suchbenutzer, Wenn Sie ein .NET Core-Entwickler sind, sollten Sie die Inhaltstypen manuell festlegen, da deren Standardwert null oder leer ist:

var provider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});
1
VahidN

wenn die Anwendung auf IIS gehostet wird, stellen Sie sicher, dass der statische Inhalt installiert ist. Systemsteuerung> Programme> Windows-Funktionen aktivieren oder deaktivieren> Internetinformationsdienste> World Wide Web-Dienste> Allgemeine HTTP-Funktionen> Statischer Inhalt.

Bei dem Versuch, eine vorhandene Anwendung auf einer neuen IIS 10.0-Installation auszuführen, trat dieses Problem auf

0
user890255

In meinem Fall benutze ich

$.getJSON(url, function(json) { ... });

um die Anfrage zu stellen (an die Flickr-API), und ich habe den gleichen MIME-Fehler. Wie die oben vorgeschlagene Antwort, fügen Sie den folgenden Code hinzu:

$.ajaxSetup({ dataType: "jsonp" });

Das Problem wurde behoben, und in der Chrome-Konsole wird kein MIME-Fehler mehr angezeigt.

0
Daniel