#javascript #jquery
#javascript #jquery
Вопрос:
Иногда в IE мои запросы ajax не отправляют заголовок X-Requested-With. Я искал в Google и нашел 2 способа сделать это. Оба способа, похоже, имеют смысл. Я хочу знать, есть ли какая-либо разница между ними.
1) Использование ajaxSend
$(document).ajaxSend(function (event, request, settings) {
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
});
2) Использование ajaxSetup
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
});
Комментарии:
1. По какой-то причине использование
ajaxSetup()
не рекомендуется, так что остаетсяajaxSend()
. api.jquery.com/jquery.ajaxsetup
Ответ №1:
Если вы используете полноценный jQuery.ajax(), вы можете использовать свойство headers:
$.ajax({
headers: { "ResponseDataType" : "Json",
"X-Requested-With", "XMLHttpRequest"},
// etc
});
Добавлена СУХАЯ версия:
(function (window, undefined)
{
function extendedAjax(settings)
{
var defaultSettings = {
headers: { "X-Requested-With": "XMLHttpRequest" }
};
$.extend(defaultSettings, settings);
var jqXHR = $.ajax(settings);
return jqXHR;
}
$.extend({
eajax: extendedAjax
});
})(window);
Комментарии:
1. Да, я знаю, но я хочу сделать это для всех запросов.
2. Я просто расширяю jQuery, чтобы использовать все необходимые мне требования, поэтому мой код остается СУХИМ .
3. Почему бы не использовать ajaxSetup и не установить заголовки?
4. $.ajaxSetup({ headers: {«X-Requested-With»: «XMLHttpRequest»} });
5. Я решил не использовать это по трем причинам. Я не хочу переопределять сторонние плагины, которые полагаются на AJAX, имеющие некоторые конкретные значения. Я не хочу, чтобы сторонние плагины переопределяли мои настройки по умолчанию. В любое время, когда мне нужны значения по умолчанию, превышающие допустимые в настройках, выполняются в моей расширенной версии.