开发者

Is it possible to modify XMLHttpRequest data from beforeSend callback?

开发者 https://www.devze.com 2023-01-31 22:08 出处:网络
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 sign

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

精彩评论

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