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

最佳答案

是的,您可以对其进行修改, 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";
});

10-07 21:56