Изменение ajax-запроса jQuery, перехваченного через ajaxSend()
Я использую ajaxSend() для перехвата запросов, исходящих от плагина jQuery на моей странице, а затем фильтрую нерелевантные запросы с помощью URL-адреса ajaxOptions.
$('some-selector').ajaxSend(function(e, xhr, settings) {
var ajaxUrl = settings.url;
if (ajaxUrl.search('targetpage.aspx') == 0) {
//need to add an additional parameter to my request here
}
}
Мне нужно вставить дополнительный параметр в соответствующие запросы. Можно ли изменить запрос на этом этапе?
3 ответа
Вы можете добавить параметр в settings.data
хэш, проверив, что он не равен нулю раньше:
if (settings.data == null) {
settings.data = { };
}
settings.data['param'] = 'value';
или просто измените URL:
settings.url += (settings.url.match(/\?/) ? "&" : "?") + 'param=value';
Это старый вопрос, но я пришел сюда из Google и подумал, что другие люди, ищущие то же самое, должны иметь рабочее решение. Я попробовал предложенный ответ, но он не работает. Изменение данных в обработчике ajaxSend не меняет того, что отправляется.
Моя цель была такой же, как у OP, вставить дополнительный параметр в запросы.
Поэтому я придумал для этого хакерское решение: переопределить метод jQuery ajax. Просто замените "injected_param" и "injected_value" в соответствии с вашими потребностями. Я добавил несколько охранников, чтобы проверить, присутствует ли параметр или нет, на всякий случай.
$(function() {
var jqAjax = $.ajax;
$.ajax = function (settings, settingsObj) {
if (typeof(settings) == "string") {
settingsObj.url = settings;
settings = settingsObj;
}
if (!settings.data) {
settings.data = {};
}
if (typeof(settings.data) == "string" && settings.data.indexOf("&injected_param=") < 0) {
settings.data += "&injected_param=injected_value";
}
else if (!settings.data.injected_param) {
settings.data.injected_param = "injected_value";
}
jqAjax (settings);
};
});
Или же:
//Interrupt AJAX requests and switch out the URL.
jQuery(document).bind('ajaxSend', function(event, xhr, params) {
event.preventDefault();
//Make sure this isn't one we've already modified, or it will loop infinitely
if (!~params.url.search("http://www.example.com")) {
//This is an untainted url, so change it.
params.url = "http://www.example.com";
//Send the request again with the new parameters.
jQuery.ajax(params);
}
return false;
});