Проблема глобальной переменной jQuery - PullRequest
2 голосов
/ 02 марта 2010
var id = $(this).children().html();  // id is 5
$.ajax({
   url: 'ajax.php?id=' + id,
   success: function(data) {
      id = data;   // id is 1
   }
});
if(id == 1){    // id is again 5
   ...
}

Почему в следующем примере я не могу повторно инициализировать переменную id? Что не так?

Спасибо.

Ответы [ 6 ]

3 голосов
/ 02 марта 2010

Функция $.ajax() должна пойти и получить данные, она не сделала этого и выполнила ваш успешный обратный вызов к тому времени, как сразу же после этого достигла кода.

Ваш код заказа на самом деле происходит так:

var id = $(this).children().html();
//Ajax start
if(id == 1){ }
//Ajax end (sometime later, not immediately after)
function(data) { id = data; }

Если вы зависите от этого значения для продолжения, вставьте его в обратный вызов успеха:

var id = $(this).children().html();  // id is 5
$.ajax({
   url: 'ajax.php?id=' + id,
   success: function(data) {
      id = data;   // id is 1
      if(id == 1){    // id is now 1
        ...
      }
   }
});
2 голосов
/ 02 марта 2010

Рефакторинг кода, как это будет работать:

function by_id() {
 if(id == 1) {   
   ... do something ...
 }
}

var id = $(this).children().html();
$.ajax({
   url: 'ajax.php?id=' + id,
   success: function(data) {
      id = data;
      by_id();  // call on successful ajax load
   }
});

Преимущество использования логики id в функции позволяет вам вызывать ее где угодно - будь то в конце запроса AJAX, при загрузке страницы, нажатии кнопки и т. Д.

1 голос
/ 25 мая 2010

Эй, лучшее решение - использовать свойство async: false , что-то вроде этого:

var id = $(this).children().html();  // id is 5
$.ajax({
   url: 'ajax.php?id=' + id,
   async: false,
   success: function(data) {
      id = data;   // id is 1
   }
});
if(id == 1){    // id is again 5
   ...
}

;)

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

A в Ajax для асинхронного. Из обратного вызова «success» вы можете вызвать другую функцию или выполнить код post-ajax

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

ваш , если оператор выполняется до того, как ваш .ajax вызов завершится

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

Функция AJAX является асинхронной. Он будет работать в фоновом режиме, и когда он получит страницу ajax.php, он запустит функцию успеха.

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