是否可以从beforeSend回调中修改XMLHttpRequest数据?

时间:2010-12-24 15:30:16

标签: javascript ajax jquery xmlhttprequest

是否可以通过修改beforeSend回调中的XMLHttpRequest对象来修改Ajax请求中发送的数据?如果是的话,我该怎么做?

2 个答案:

答案 0 :(得分:14)

是的你可以修改它,beforeSend的签名实际上是 (在jQuery 1.4 +中):

beforeSend(XMLHttpRequest, settings)

即使文档只有beforeSend(XMLHttpRequest)you can see how it's called here,其中s is the settings object

if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) {

因此,可以在此之前修改data参数(note that it's already a string by this point,即使您传入了一个对象)。修改它的示例如下所示:

$.ajax({
  //options...
  beforeSend: function(xhr, s) {
    s.data += "&newProp=newValue";
  }
});

如果有帮助,相同的签名适用于.ajaxSend()全局处理程序( 有正确的documentation显示它),如下所示:

$(document).ajaxSend(function(xhr, s) {
  s.data += "&newProp=newValue";
});

答案 1 :(得分:1)

我一直在寻找这个解决方案,并想知道为什么我找不到s.data 所以我将请求类型更改为发布,它就在那里, 看起来如果你使用GET请求数据属性不存在,我想你必须改变s.url

获取get方法:

$.ajax({
  type:'GET',
  beforeSend: function(xhr, s) {
    s.url += "&newProp=newValue";
  }
});

用于发布方法:

$.ajax({
  type:'POST',
  beforeSend: function(xhr, s) {
    s.data += "&newProp=newValue";
  }
});