Можно ли изменить данные XMLHttpRequest от обратного вызова beforeSend? - PullRequest
6 голосов
/ 24 декабря 2010

Можно ли изменить данные, отправленные в запросе Ajax, изменив объект XMLHttpRequest в обратном вызове beforeSend? и если да, то как я могу это сделать?

Ответы [ 2 ]

14 голосов
/ 25 декабря 2010

Да, вы можете изменить его, подпись beforeSend равна на самом деле (в jQuery 1.4 +):

beforeSend(XMLHttpRequest, settings)

, даже если в документации естьпросто beforeSend(XMLHttpRequest), вы можете увидеть, как он называется здесь , где s - это объект настроек :

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

Итак, вы можете измените аргумент data до этого ( обратите внимание, что уже строка к этому моменту , даже если вы передали объект).Пример изменения может выглядеть следующим образом:

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

Если это поможет, та же подпись применяется к глобальному обработчику .ajaxSend() (который имеет правильная документация , показывающая это), вот так:

$(document).ajaxSend(function(xhr, s) {
  s.data += "&newProp=newValue";
});
1 голос
/ 13 мая 2015

Я искал это решение и удивляюсь, почему я не нахожу s.data поэтому я изменил тип запроса на пост, и он был там, Похоже, если вы используете GET-запрос, свойства данных там нет, я думаю, вам нужно изменить s.url

для метода get:

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

для почтового метода:

$.ajax({
  type:'POST',
  beforeSend: function(xhr, s) {
    s.data += "&newProp=newValue";
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...