Я испытываю трудную ошибку ajax в IE9. Я заранее скажу, что это технически не междоменный запрос, поэтому я уверен, что это не проблема.
Редактировать : Похоже, что проблема может быть связана с запросом того же домена, который рассматривается как междоменный, хотя неясно, почему (см. Комментарии).
Я использую локальный прокси-сервер для выполнения междоменных запросов Ajax, и URL-адрес, который я использую, выглядит следующим образом http://localhost/proxy/?target=.....
Все хорошие браузеры довольны этим, но IE немедленно возвращает ошибку до того, как запрос будет отправлен (у меня есть проверил это, используя сетевой захват Fiddler и инструментов разработчика IE).
Когда я проверяю объект ошибки, переданный обратному вызову JQuery ajax.error, его функция isRejected()
возвращает true, но я не могу выяснить, что может привести к отклонению запроса. ReadyState объекта ошибки - 4 (подразумевается, что запрос завершен?), Status - 0, а statusText - «error».
Я строю свой запрос примерно так:
$.ajax(url, {
data: {...list of parameters...},
dataType: 'json',
type: 'GET',
success: function() { ... },
error: function() { ... },
beforeSend: proxy.beforeRequestSend,
timeout: 35000
});
Функция proxy.beforeRequestSend выглядит следующим образом:
this.beforeRequestSend = function(XHR, settings) {
if(that.proxyRequired(settings.url)) {
// I've also tried using the full url (http://localhost/proxy/?...)
settings.url = 'proxy/?target=' + encodeURIComponent(settings.url);
}
};
Кто-нибудь знает, что может вызвать полный сбой запроса в IE9? К сожалению, у меня нет доступа к IE8 или 7 для тестирования, но я предполагаю, что они будут вести себя одинаково. Тот факт, что обработчик ошибок JQuery ajax вызывается, говорит о том, что ошибка возникает не во время создания запроса, а когда он предположительно выполняется. Все остальные браузеры, работающие правильно, говорят мне, что основные принципы верны.
Ранее я читал, что в JQuery / IE есть проблемы с кодировкой url некоторых символов, но если я предупреждаю settings.url
в конце функции beforeSend, целевой URL корректно закодирован (это также говорит мне, что that.proxyRequired(settings.url)
возвращает true).
Любой вклад очень ценится.