Я пытаюсь получить доступ к 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);
}
});
У кого-нибудь есть обходное решение для этого?
Добавив аргумент обратного вызова, вы сообщаете jQuery, что вы хотите сделать запрос для JSONP с помощью элемента script вместо запроса JSON с использованием XMLHttpRequest.
JSONP не JSON. Это программа JavaScript.
Измените свой сервер, чтобы он выдал правильный MIME-тип для JSONP, который равен application/javascript
.
(Пока вы на нем, перестаньте сообщать jQuery, что вы ожидаете JSON, поскольку это противоречиво: dataType: 'jsonp'
).
Если ваш прокси-сервер или контейнер добавляет следующий заголовок при обслуживании .js файла, он заставит некоторые браузеры, такие как Chrome, выполнить строгую проверку типов MIME:
X-Content-Type-Options: nosniff
Удалите этот заголовок, чтобы предотвратить выполнение проверки MIME.
X-Content-Type-Options: nosniff
) является хорошим вариантом для предотвращения атак с X-Content-Type-Options: nosniff
контента.
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.
Я столкнулся с этой ошибкой, используя IIS 7.0 с пользовательской страницей ошибок 404, хотя я подозреваю, что это произойдет с любой 404 страницей. Сервер вернул html 404 ответ с типом text/html mime, который не мог (по праву) быть выполнен.
В моем случае я использую
$.getJSON(url, function(json) { ... });
чтобы сделать запрос (для Flickr API), и я получил ту же ошибку MIME. Как и предложенный выше ответ, добавьте следующий код:
$.ajaxSetup({ dataType: "jsonp" });
Исправлена ошибка, и я больше не вижу ошибку типа MIME в консоли Chrome.