修改通过ajaxSend()拦截的jQuery ajax请求

我正在使用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 } } 

我需要在相关请求中插入一个额外的参数。 此时是否可以修改请求?

您可以通过在以下情况之前检查它是否为null来将参数附加到settings.data哈希:

 if (settings.data == null) { settings.data = { }; } settings.data['param'] = 'value'; 

或者只是修改url:

 settings.url += (settings.url.match(/\?/) ? "&" : "?") + 'param=value'; 

这是一个老问题,但我从谷歌来到这里,并认为其他人搜索相同的东西应该有一个有效的解决方案。 我已经尝试了建议的答案,但它不起作用。 修改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); }; }); 

要么:

 //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; });