2015-04-04 4 views
0

У меня есть JQuery-кода:Значение не передается переменной (JQuery, Javascript)

$.post("count_images.php",{}, function(data) 
    { 
     if (data != '') 
     { 
      alert(data); 
     } 
     else 
     { 
      //Error 
     } 
    }); 

Он просто посылает запрос на count_images.php и возвращает число, как 23, например. Это работает отлично, но когда я меняю его на это:

var number_images; 

    $.post("count_images.php",{}, function(data) 
    { 
     if (data != '') 
     { 
      number_images = data; 
     } 
     else 
     { 
      //Error 
     } 
    }); 

    alert(number_images); 

Не работает. Функция alert всегда выводит undefined. Я просто хочу сохранить результат, сохраненный в data, в переменной с именем number_images, поэтому я могу продолжать работать с этим. Заранее большое спасибо.

ответ

1

Метод $.post() асинхронный, поэтому при запуске второй фрагмент кода, то alert будет отстреливается до AJAX POST возвращается с указанием даты, следовательно, почему number_images является undefined (так как он еще не заселен).

Вы можете выполнить POST синхронно, используя $.ajax() и обходя async: false и method: 'POST' флаги. Но это, как правило, не очень хорошая идея, так как она побеждает всю цель AJAX (в конце концов, A означает асинхронность).

В качестве альтернативы, либо используйте функцию обратного вызова (то же, что и первый фрагмент), либо атакуйте другие обратные вызовы, используя jQuery Promise API. Например,

$.post("count_images.php") 
    .done(function(data) 
    { 
     if (data != '') 
     { 
      alert(data); 
     } 
     else 
     { 
      //Error 
     } 
    }); 
0
var number_images, 
     data =''; 

$.post("count_images.php",{}, function(data) 
{ 
    if (data != '') 
    { 
     number_images = data; 
    } 
    else 
    { 
     //Error 
    } 
}); 

alert(number_images); 
1

Имейте в виду, что $ .post() представляет собой асинхронный метод и все, что код в функции обратного вызова, так что, когда

alert(number_images); 

называется ваша функция обратного вызова, вероятно, еще не запустить потому что $ .post() все еще ждет ответа.

Вам нужно поместить все, что использует number_images в обратном вызове. Это может быть полезно, чтобы определить другую функцию следующим образом:

var number_images; 

var do_stuff_with_number_images = function() { 
    alert(number_images); 
    // any other code referencing number_images goes here 
}; 

$.post("count_images.php",{}, function(data) 
{ 
    if (data != '') 
    { 
     number_images = data; 
    } 
    else 
    { 
     //Error 
    } 

    do_stuff_with_number_images(); 
}); 

alert(number_images); 
Смежные вопросы