web-dev-qa-db-fra.com

Chrome refuse d'exécuter un script AJAX en raison d'un type MIME incorrect

J'essaie d'accéder à un script au format JSON via AJAX, qui fonctionne correctement sous Safari et sur d'autres navigateurs, mais ne s'exécutera malheureusement pas sous Chrome. Cela vient avec l'erreur suivante:

A refusé d'exécuter le script à partir de '*' car son type MIME ('application/json') n'est pas exécutable et la vérification de type MIME stricte est activée.

Voici la demande:

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

Quelqu'un at-il une solution de contournement pour cela?

141
Paul Nelligan

En ajoutant un argument de rappel, vous indiquez à jQuery que vous souhaitez effectuer une demande pour JSONP à l'aide d'un élément de script au lieu d'une demande pour JSON à l'aide de XMLHttpRequest.

JSONP n'est pas JSON. C'est un programme JavaScript.

Modifiez votre serveur pour qu'il génère le bon type MIME pour JSONP, à savoir application/javascript.

(Pendant que vous y êtes, arrêtez de dire à jQuery que vous attendez JSON car cela est contradictoire: dataType: 'jsonp').

69
Quentin

Si votre serveur proxy ou votre conteneur ajoute l'en-tête suivant lors du traitement du fichier .js, certains navigateurs, tels que Chrome, seront forcés de vérifier de manière stricte les types MIME:

X-Content-Type-Options: nosniff

Supprimez cet en-tête pour empêcher Chrome d'effectuer la vérification MIME.

54
Tom Chamberlain

Pour info, j'ai la même erreur de la console Chrome. Je pensais que ma fonction AJAX en était la cause, mais je ne commentais pas mon script minifié de /javascripts/ajax-Vanilla.min.js à /javascripts/ajax-Vanilla.js. Mais en réalité, le fichier source était à /javascripts/src/ajax-Vanilla.js. Donc, dans Chrome, vous obtenez une erreur de type MIME, même si le fichier est introuvable. Dans ce cas, le message d'erreur est décrit comme text/plain mauvais type MIME.

10
Lanti

J'ai rencontré cette erreur en utilisant IIS 7.0 avec une page d'erreur 404 personnalisée, bien que cela puisse arriver avec n'importe quelle page 404. Le serveur a renvoyé une réponse html 404 avec un type mime text/html qui n'a pas pu (à juste titre) être exécuté.

1
James Westgate

Pour les utilisateurs de Google Record et Google, Si vous êtes un développeur .NET Core, vous devez définir les types de contenu manuellement, car leur valeur par défaut est null ou vide:

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

si l'application est hébergée sur IIS, assurez-vous que le contenu statique est installé. Panneau de configuration> Programmes> Activer ou désactiver des fonctionnalités Windows> Internet Information Services> Services World Wide Web> Fonctionnalités HTTP communes> Contenu statique.

J'ai rencontré ce problème lorsque j'essayais d'exécuter une application existante sur une nouvelle installation IIS 10.0

0
user890255

Dans mon cas, j'utilise

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

faire la demande (à l'API de Flickr), et j'ai la même erreur MIME. Comme la réponse ci-dessus suggérée, en ajoutant le code suivant:

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

Correction du problème et je ne vois plus l'erreur de type MIME dans la console de Chrome.

0
Daniel