Как назначить переменную для возвращаемого ответа в JQuery - PullRequest
0 голосов
/ 30 марта 2010

Я хотел присвоить возвращаемое значение (просто текст) переменной в jQuery. Я написал это:

 var hm=22;

   $.ajax({
       type: "GET",
       url: "ajax_check_match.php",                                                     
       dataType: "text",
       success:callback
       });

  function callback(data, status)
    {   
           // assign ajaxed value to cm variable                                                
    cm=data;

    if (hm != cm)
    {
    dosomething();
    }
     }

Но каждый раз это терпит неудачу. Почему переменная cm продолжает получать неопределенную при отправке запроса. Я установил PHP-файл, чтобы вернуть 1, и он по-прежнему говорит неопределенный. Я открыл ajax_check_match.php в браузере, и я вижу «1».

Я не видел смысла использовать XML или JSON, так как достаточно простого числа. Или я должен использовать XML / JSON?

ОБНОВЛЕНИЕ: что касается поиска неопределенного результата ... Я написал $ ("msgbox"). Append ("hm is" + hm + "и cm is + cm) после функции обратного вызова, и cm всегда возвращает undefined. напечатано 22. Он устанавливает интервалы между тремя секундами, так что он продолжает добавлять hm равен 22, а cm не определено.

НОВОЕ ОБНОВЛЕНИЕ: я идиот. Период. Файл ajax_check_msg.php был в неправильном месте - другой код. Я проверил не ту страницу. Но будьте уверены, я ценю ваши предложения!

Ответы [ 5 ]

2 голосов
/ 30 марта 2010

Если ваш PHP-файл возвращает 1, поскольку hm имеет значение 22, cm != hm всегда будет истинным.

cm показывает неопределенное ... потому что, ну, вы не определяете это. Помещенный

var cm = ''; // or something else

Где-то, чтобы сначала инициализировать его.

1 голос
/ 30 марта 2010

Я на самом деле не знаю jQuery, но, глядя здесь , похоже, вы хотите, чтобы html был вашим типом данных. Я бы также порекомендовал сделать alert(cm); после того, как вы его определили, чтобы увидеть, что это такое, а не просто проверить, не является ли оно одним конкретным значением.

0 голосов
/ 30 марта 2010

Вывод data, чтобы увидеть, если это то, что вы ожидаете. Еще лучше, не устанавливайте другую лишнюю переменную, а просто используйте if(hm != data).

hm никогда не будет равняться cm или data, потому что первый - это число, а последние 2 - строки Сначала нужно сделать какое-то переключение типов.

0 голосов
/ 30 марта 2010

AJAX происходит асинхронно, это означает, что ваша функция обратного вызова происходит, когда ответ возвращается, а не в порядке, в котором он появляется в вашем коде.

Ваш код происходит в следующем порядке:

  1. var hm=22;
  2. $.ajax срабатывает
  3. Код, вызвавший этот код, заканчивается
  4. Позже ваш ответ возвращается, и функция callback срабатывает.

Из-за этого вы не можете вернуть cm, он не будет установлен, пока не будет запущена функция обратного вызова. Вместо этого вызывайте любой код, который должен произойти, используя cm из функции обратного вызова, поэтому он будет работать, когда переменная будет готова.

0 голосов
/ 30 марта 2010

Вы уверены, что 22 возвращается? Что Firebug показывает ответ? Я держу пари, что это нечто иное, чем просто

...