我正在使用ajaxSend()拦截源自我页面上的jQuery插件的请求,然后使用ajaxOptions url过滤不相关的请求。
$('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
}
}
我需要在相关请求中插入一个额外的参数。此时是否可以修改请求?
答案 0 :(得分:4)
您可以通过在以下之前检查它是否为null来将参数附加到settings.data
哈希:
if (settings.data == null) {
settings.data = { };
}
settings.data['param'] = 'value';
或只修改网址:
settings.url += (settings.url.match(/\?/) ? "&" : "?") + 'param=value';
答案 1 :(得分:2)
这是一个老问题,但我是从谷歌来到这里的,并认为搜索相同内容的其他人应该有一个可行的解决方案。我已经尝试了建议的答案,但它不起作用。修改ajaxSend处理程序中的数据不会改变发送的内容。
我的目标与OP相同,在请求中插入一个额外的参数。
所以我为它设计了一个hacky解决方案:覆盖jQuery的ajax方法。 只需替换“inject_param”和“inject_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);
};
});
答案 2 :(得分:0)
或者:
//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;
});