Chrome si rifiuta di eseguire uno script AJAX a causa di un tipo MIME errato

Sto provando ad accedere a uno script come JSON tramite AJAX, che funziona bene su Safari e altri browser, ma sfortunatamente non verrà eseguito in Chrome. Arriva con il seguente errore:

Rifiutato di eseguire script da ‘*’ perché il suo tipo MIME (‘application / json‘) non è eseguibile e il controllo del tipo MIME è abilitato.

Ecco la richiesta:

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

Qualcuno ha una soluzione alternativa per questo?

Aggiungendo un argomento di callback, stai dicendo a jQuery che vuoi fare una richiesta per JSONP usando un elemento script invece di una richiesta per JSON usando XMLHttpRequest.

JSONP non è JSON. È un programma JavaScript.

Cambia il tuo server in modo che generi il giusto tipo MIME per JSONP che è application/javascript .

(Mentre ci sei, smetti di dire a jQuery che stai aspettando che JSON sia contraddittorio: dataType: 'jsonp' ).

Se il tuo server o contenitore proxy aggiunge la seguente intestazione quando serve il file .js, costringerà alcuni browser come Chrome a eseguire controlli rigorosi sui tipi MIME:

 X-Content-Type-Options: nosniff 

Rimuovi questa intestazione per impedire a Chrome di eseguire il controllo MIME.

Cordiali saluti, ho lo stesso errore dalla console di Chrome. Ho pensato che la mia funzione AJAX lo causasse, ma ho decommentato il mio script /javascripts/ajax-vanilla.min.js da /javascripts/ajax-vanilla.min.js a /javascripts/ajax-vanilla.js . Ma in realtà il file sorgente era in /javascripts/src/ajax-vanilla.js . Pertanto, in Chrome si verifica un errore di tipo MIME errato anche se non è ansible trovare il file. In questo caso, il messaggio di errore è descritto come text/plain MIME di tipo text/plain .

Per gli utenti registrati e di ricerca di Google , se sei uno sviluppatore di .NET Core, devi impostare manualmente i tipi di contenuto, perché il loro valore predefinito è nullo o vuoto:

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

Ho riscontrato questo errore utilizzando IIS 7.0 con una pagina di errore 404 personalizzata, sebbene sospetto che ciò accada con qualsiasi pagina 404. Il server ha restituito una risposta html 404 con un tipo mime text / html che non poteva (giustamente) essere eseguito.

se l’applicazione è ospitata su IIS, assicurarsi che Contenuto statico sia installato. Pannello di controllo> Programmi> Attiva o distriggers le funzionalità di Windows> Internet Information Services> Servizi Web> Funzionalità HTTP comuni> Contenuto statico.

Ho affrontato questo problema durante il tentativo di eseguire un’applicazione esistente su una nuova installazione di IIS 10.0

Nel mio caso, io uso

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

per fare la richiesta (all’API di Flickr), e ho avuto lo stesso errore MIME. Come la risposta sopra suggerita, aggiungendo il seguente codice:

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

Risolto il problema e non vedo più l’errore di tipo MIME nella console di Chrome.