Próbuję uzyskać dostęp do skryptu jako JSON przez AJAX, który działa dobrze w Safari i innych przeglądarkach, ale niestety nie działa w Chrome. Przychodzi z następującym błędem:
Odmówił wykonania skryptu z „*”, ponieważ jego typ MIME („application / json”) nie jest wykonywalny i włączone jest ścisłe sprawdzanie typu MIME.
Oto prośba:
$.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);
}
});
Czy ktoś ma na to obejście?
javascript
jquery
ajax
json
google-chrome
Paul Nelligan
źródło
źródło
Odpowiedzi:
Dodając argument wywołania zwrotnego, mówisz jQuery, że chcesz wysłać żądanie JSONP przy użyciu elementu skryptu zamiast żądania JSON przy użyciu XMLHttpRequest.
JSONP to nie JSON. Jest to program JavaScript.
Zmień serwer, aby wyświetlał właściwy typ MIME dla JSONP, którym jest
application/javascript
.(Skoro już to robisz, przestań mówić jQuery, że oczekujesz JSON, ponieważ jest to sprzeczne :)
dataType: 'jsonp'
.źródło
Jeśli Twój serwer proxy lub kontener doda następujący nagłówek podczas udostępniania pliku .js, zmusi to niektóre przeglądarki, takie jak Chrome, do ścisłego sprawdzania typów MIME:
Usuń ten nagłówek, aby uniemożliwić Chrome wykonywanie sprawdzania MIME.
źródło
X-Content-Type-Options: nosniff
nagłówka) jest dobrą opcją, aby zapobiec atakom polegającym na wykrywaniu treści.FYI, mam ten sam błąd z konsoli Chrome. Myślałem, że powoduje to moja funkcja AJAX, ale odkomentowałem mój zminimalizowany skrypt od
/javascripts/ajax-vanilla.min.js
do/javascripts/ajax-vanilla.js
. Ale w rzeczywistości plik źródłowy był pod adresem/javascripts/src/ajax-vanilla.js
. Więc w Chrome pojawia się zły błąd typu MIME, nawet jeśli nie można znaleźć pliku. W takim przypadku komunikat o błędzie jest opisywany jakotext/plain
zły typ MIME.źródło
Napotkałem ten błąd przy użyciu usług IIS 7.0 z niestandardową stroną błędu 404, chociaż podejrzewam, że stanie się to z każdą stroną 404. Serwer zwrócił odpowiedź html 404 z typem MIME text / html, której (słusznie) nie można było wykonać.
źródło
Dla rekordu i użytkowników wyszukiwarki Google , jeśli jesteś programistą .NET Core, powinieneś ustawić typy zawartości ręcznie, ponieważ ich domyślna wartość to null lub pusta:
źródło
W moim przypadku używam
aby wysłać żądanie (do API Flickr) i otrzymałem ten sam błąd MIME. Jak sugerowała powyższa odpowiedź, dodając następujący kod:
Naprawiliśmy problem i nie widzę już błędu typu MIME w konsoli Chrome.
źródło
jeśli aplikacja jest hostowana w usługach IIS, upewnij się, że jest zainstalowana zawartość statyczna. Panel sterowania> Programy> Włącz lub wyłącz funkcje systemu Windows> Internetowe usługi informacyjne> Usługi World Wide Web> Typowe funkcje HTTP> Zawartość statyczna.
Napotkałem ten problem podczas próby uruchomienia istniejącej aplikacji na nowej instalacji IIS 10.0
źródło