Несмотря на то, что, очевидно, лучше избегать этой проблемы с помощью прямого вызова $.ajax
, вы можете создать прокси-метод для метода $.ajax
. Это помогает, поскольку $.load
в свою очередь вызывает $.ajax
с набором параметров по умолчанию. Поэтому мы можем перехватить $.load
s вызов $.ajax
.
var org = $.ajax;
$.ajax = function(settings){
settings['accepts'] = null;
settings['beforeSend'] = function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
}
org(settings);
}
$("#foo").load("http://fiddle.jshell.net/FpCBJ/show/light/");
Попробуйте
Очевидно, что это повлияет на ВСЕ вызовы $.ajax
, поэтому вы можете добавить еще один параметр в метод прокси, который можно установить и проверить в прокси, чтобы избежать установки requestheader при непосредственном вызове. Или в настройках даже.
Полагаю, вы также можете добавлять / удалять прокси-сервер для каждого вызова, но это увеличивает накладные расходы и может привести к условиям гонки (?) (Не думаю, что если вы удалите прокси сразу после запроса, не ждите для обратного вызова), поэтому вам понадобится какой-нибудь замок.
EDIT: добавлено settings['accepts'] = null;
, чтобы $.ajax
не добавлял заголовки до обратного вызова, поскольку setRequestHeader()
только добавляет, но не заменяет. Мальчик это грязно.
РЕДАКТИРОВАТЬ 2: На самом деле, возможно, более понятным вариантом было бы настроить свои собственные приемы и сослаться на них, чтобы позволить $.ajax
выполнять свою работу по отображению типов данных и самостоятельно настраивать XHR:
var org = $.ajax;
$.ajax = function(settings){
settings['accepts'] = {"myDataType" : "text/javascript"};
settings['dataType'] = "myDataType";
org(settings);
}
$("#foo").load("http://fiddle.jshell.net/FpCBJ/show/light/");