Is it possible to modify XMLHttpRequest data from beforeSend callback?

前端 未结 2 2023
走了就别回头了
走了就别回头了 2020-12-30 14:23

Is it possible to modify the data sent in an Ajax request by modifying the XMLHttpRequest object in the beforeSend callback? and if so how might I do that?

相关标签:
2条回答
  • 2020-12-30 14:52

    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 讨论(0)
  • 2020-12-30 15:04

    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";
    });
    
    0 讨论(0)
提交回复
热议问题