jQuery вводит данные в глобальное событие ajax - PullRequest
3 голосов
/ 06 июня 2011

Я пытаюсь ввести данные в мои запросы AJAX, но это не удается, и я не знаю почему. Я пытался взглянуть на исходный код jQuery, но до сих пор не могу понять, почему он не работает. Любая помощь приветствуется. Вот код:

$('#someElement').ajaxSend(function(e, req, options) {
    options.data += (options.data.length > 0 ? '&' : '') + '__token=' + $('input#requestToken').val();
}).ajaxSuccess(function(e, req, options, data) {
    if (data.nextToken) {
        $('input#requestToken').val(data.nextToken);
        delete data.nextToken;
    }
});

Ответ выглядит так:

{
   "response":
   {
      "code":0,
      // ...
   },
   "nextToken":"4ded26352b3d44"
}

Типичным запросом будет, например:

$.getJSON(url, {something:'value'}, function(data) {
   if (data.response.code != 0) {
      // handle code
   }
});

Проблема в том, что отправленные данные "something=value"; измененный data не отправляется.

** РЕДАКТИРОВАТЬ **

Данные текущего запроса

something: value

и должно быть

something: value
__token: 4ded288eec1f56

В обратном вызове события ajaxSend, если я печатаю значение options.data после его изменения, значение равно "something=value&__token=4ded288eec1f56", но "__token=4ded288eec1f56" - это , а не отправлено. Почему оно не отправлено в запросе?

Но точнее, как это "исправить", если вообще возможно?

Ответы [ 4 ]

2 голосов
/ 06 июня 2011

Думаю, проблема в том, что к тому времени, когда jQuery решит вызвать обратный вызов «ajaxSend», параметры уже были использованы для подготовки запроса. Таким образом, изменение их в этом обработчике не имеет никакого эффекта.

изменить & mdash; учитывая ответ @mikermcneil, я не уверен, что это правильно. Метод jQuery «ajax», по меньшей мере, сложен. Его пример страницы , кажется, работает, что смущает меня, но, вероятно, должно помочь мне осознать, как мало я знаю о внутренностях jQuery: -)

2 голосов
/ 06 июня 2011

-edit

Обновление-- проблема в getJSON.

Похоже, что хотя jQuery запускает событие ajaxSend в обоих случаях, он фактически не использует измененную переменную данных с getJSON, как с post.

Замените getJSON на $ .post, чтобы решить вашу проблему (это то, что я делаю в примере, на который я ссылаюсь ниже).

-edit- Ну, я настроил версию здесь:

http://abolition.me/toys/View/attachAjax.html (см. консоль)

У меня сервер отправляет обратно все, что он получил, и он говорит: __token: "токотокетоке" ключ: "val1" key2: "val2"

Так что похоже, что изменение данных запроса работает - как выглядит ваш обработчик на стороне сервера?

Я смотрю на это - в первую очередь, хотя (и я допустил ошибку, когда пытался воспроизвести проблему), вы проверили, что вы назначаете свое событие после того, как документ готов? ($ (function () {});)

0 голосов
/ 06 июня 2011

Вы передаете данные только во втором параметре в вашем вызове getJSON {что-то: 'значение'}. Любые данные, которые вы хотите отправить на сервер, должны быть включены туда. Таким образом, __token должен быть включен в этот параметр.

Третий параметр в вызове getJSON - это функция обратного вызова. Параметр, переданный этой функции, является ответом от сервера.

$.getJSON(
    url,
    {
        something:'value',
        __token: 'token value'
    ,
    function(response) {
        if (response.response.code != 0) {
        // handle code
        }
    }
);
0 голосов
/ 06 июня 2011

Я не уверен, что ваш ответ JSON правильный:

{
  "response":
  {
  "code":0,  <-- this is not valid
  },
  "nextToken":"4ded26352b3d44"
}

допустимо должно быть:

{
  "response":
  {
  "code":0
  },
  "nextToken":"4ded26352b3d44"
}

Для проверки вашего ответа JSON вы можете использовать:

Валидатор JSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...