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

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

Отказался от выполнения script из '*', потому что его тип 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);
    }
});

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

Ответ 1

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

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

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

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

Ответ 2

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

X-Content-Type-Options: nosniff

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

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

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