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";
}
});
精彩评论