Chrome refuse d'exécuter un script AJAX à cause d'un mauvais type MIME

je suis en train d'essayer d'accéder à un script comme JSON via AJAX, qui fonctionne très bien sur Safari et d'autres navigateurs, mais malheureusement ne s'exécutera pas dans Chrome. Il arrive avec l'erreur suivante:

a refusé d'Exécuter script à partir de ' * 'parce que son type MIME ('application/json') n'est pas exécutable, et la vérification stricte du type MIME est activée.

Voici la requête:

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

est-ce que quelqu'un a solution pour cela?

137
demandé sur Smi 2014-07-02 13:59:53

7 réponses

en ajoutant un argument callback, vous dites à jQuery que vous voulez faire une requête pour JSONP en utilisant un élément script au lieu d'une requête pour JSON en utilisant XMLHttpRequest.

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

changez votre serveur pour qu'il affiche le type MIME approprié pour JSONP qui est application/javascript .

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

67
répondu Quentin 2014-07-02 10:17:48

si votre serveur mandataire ou conteneur ajoute l'en-tête suivant lors de la distribution du .fichier js, il va forcer certains navigateurs tels que Chrome à effectuer une vérification stricte des types MIME:

X-Content-Type-Options: nosniff

supprimer cet en-tête pour empêcher Chrome d'effectuer le contrôle MIME.

52
répondu Tom Chamberlain 2014-12-03 09:19:15

POUR INFO, J'ai la même erreur de la console Chrome. J'ai pensé que ma fonction AJAX le provoquait, mais j'ai décommenté mon script miniifié de /javascripts/ajax-vanilla.min.js à /javascripts/ajax-vanilla.js . Mais en réalité, le fichier source était à /javascripts/src/ajax-vanilla.js . Ainsi, dans Chrome, vous obtenez une erreur de type MIME même si le fichier ne peut pas être trouvé. Dans ce cas, le message d'erreur est décrit comme text/plain mauvais type MIME.

9
répondu Lanti 2017-07-17 11:54:07

pour le dossier et les utilisateurs de recherche Google , Si vous êtes un développeur. net Core, vous devriez définir les types de contenu manuellement, car leur valeur par défaut est nulle ou vide:

var provider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});
2
répondu VahidN 2018-03-13 08:19:32

j'ai rencontré cette erreur en utilisant IIS 7.0 avec une page d'erreur custom 404, bien que je soupçonne que cela se produira avec n'importe quelle page 404. Le serveur a renvoyé une réponse html 404 avec un type MIME text/html qui ne pouvait pas (à juste titre) être exécutée.

1
répondu James Westgate 2016-05-24 09:31:22

si l'application est hébergée sur IIS, assurez-vous que le contenu statique est installé. Panneau de configuration > Programmes > activez ou désactivez les fonctions Windows > Services D'Information sur Internet > Services Web > fonctions HTTP courantes > contenu statique.

j'ai fait face à ce problème en essayant d'exécuter une application existante sur une nouvelle installation IIS 10.0

1
répondu user890255 2018-08-13 21:11:10

dans mon cas, j'utilise

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

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

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

a corrigé le problème et je ne vois plus l'erreur de type MIME dans la console de Chrome.

0
répondu Daniel 2015-03-20 22:45:30