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

у кого-нибудь есть решение для этого?

7 ответов


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

JSONP не является JSON. Это программа JavaScript.

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

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


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

X-Content-Type-Options: nosniff

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


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


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

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

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


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

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


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

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

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

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

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