【问题标题】:Is it possible to modify XMLHttpRequest data from beforeSend callback?是否可以从 beforeSend 回调中修改 XMLHttpRequest 数据?
【发布时间】:2010-12-24 15:30:15
【问题描述】:

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

【问题讨论】:

  • 怎么修改?您想修改通话的哪些方面?
  • 是的,有可能。你自己尝试过 beforeSend 回调吗?如果是,有什么问题?

标签: javascript ajax jquery xmlhttprequest


【解决方案1】:

是的,你可以修改它,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 给过时的 jQuery 文档...删除了我的答案,因为它不正确。
【解决方案2】:

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

获取方法:

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

对于发布方式:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多