it-roy-ru.com

Chrome отказывается выполнять сценарий AJAX из-за неправильного типа MIME

Я пытаюсь получить доступ к сценарию как JSON через AJAX, который прекрасно работает в Safari и других браузерах, но, к сожалению, не будет выполняться в Chrome. Это происходит со следующей ошибкой:

Отказался от выполнения скрипта из '*', потому что его тип MIME ('application/json') не является исполняемым, и включена строгая проверка типов MIME.

Вот запрос:

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

У кого-нибудь есть обходной путь для этого?

140
Paul Nelligan

Добавляя аргумент обратного вызова, вы сообщаете jQuery, что хотите сделать запрос для JSONP с использованием элемента script вместо запроса для JSON с использованием XMLHttpRequest.

JSONP - это не JSON. Это программа на JavaScript.

Измените ваш сервер так, чтобы он выводил правильный тип MIME для JSONP, который application/javascript.

(Пока вы это делаете, прекратите сообщать jQuery, что вы ожидаете JSON, поскольку это противоречиво: dataType: 'jsonp').

68
Quentin

Если ваш прокси-сервер или контейнер добавляет следующий заголовок при обслуживании файла .js, это заставит некоторые браузеры, такие как Chrome, выполнять строгую проверку типов MIME:

X-Content-Type-Options: nosniff

Удалите этот заголовок, чтобы Chrome не выполнял проверку MIME.

53
Tom Chamberlain

К вашему сведению, у меня та же ошибка на консоли Chrome. Я думал, что моя функция AJAX вызывает ее, но я раскомментировал свой минимизированный скрипт с /javascripts/ajax-Vanilla.min.js до /javascripts/ajax-Vanilla.js. Но на самом деле исходный файл был на /javascripts/src/ajax-Vanilla.js. Таким образом, в Chrome вы получаете ошибку MIME-типа, даже если файл не найден. В этом случае сообщение об ошибке описывается как text/plain bad MIME-тип.

10
Lanti

Я столкнулся с этой ошибкой, используя IIS 7.0 с пользовательской страницей ошибки 404, хотя я подозреваю, что это произойдет с любой страницей 404. Сервер возвратил ответ html 404 с типом mime text/html, который не мог (правильно) быть выполнен.

1
James Westgate

для пользователей записи и поиска в Google, если вы являетесь разработчиком .NET Core, вам следует установить типы контента вручную, поскольку их значение по умолчанию равно нулю или пусто:

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

если приложение размещено в IIS, убедитесь, что установлено статическое содержимое. Панель управления> Программы> Включить или выключить функции Windows> Службы IIS> Службы всемирной паутины> Общие функции HTTP> Статическое содержимое.

Я столкнулся с этой проблемой при попытке запустить существующее приложение в новой установке IIS 10.0

0
user890255

В моем случае я использую

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

сделать запрос (к API Flickr), и я получил ту же ошибку MIME. Как и предложенный выше ответ, добавьте следующий код:

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

Исправлена ​​проблема, и я больше не вижу ошибку типа MIME в консоли Chrome.

0
Daniel