开发者

Is it possible to modify XMLHttpRequest data from beforeSend callback?

Is it possible to modify the data sent in an Ajax reques开发者_JAVA技巧t by modifying the XMLHttpRequest object in the beforeSend callback? and if so how might I do that?


Yes you can modify it, the signature of beforeSend is actually (in jQuery 1.4+):

beforeSend(XMLHttpRequest, settings)

even though the documentation has just beforeSend(XMLHttpRequest), you can see how it's called here, where s is the settings object:

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

So, you can modify the data argument before then (note that it's already a string by this point, even if you passed in an object). An example of modifying it would look like this:

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

If it helps, the same signature applies to the .ajaxSend() global handler (which does have correct documentation showing it), like this:

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


I was looking for this solution and wonder why I am not finding the s.data so I changed the request type to post and it was there, Looks like if you are using GET request the data property is not there, I guess you have to change the s.url

for get method:

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

for post method:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜