Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Присвоение значения переменной


Автор: Evgen24 11.1.2013, 20:20
Не могу понять как присвоить глобальной переменной в функции аякс запроса:

Код


var move_item_x = -1;

.......

$.ajax({
        type: "POST",
        url: "battle_func.php",
        data: {b_item: 4},
        dataType: 'json',
        success: function(data)
        {
            move_item_x = data.ship_x;
            move_item_y = data.ship_y;
            alert(data.ship_x);
        }
        });    
    
        alert(move_item_x);    


вот первый алерт выдает: 2 
а второй -1  

как добиться чтобы все же значение 2 присвоилось?

Автор: Amphiluke 11.1.2013, 20:30
Непонятно, что вас не устраивает. В ф-ции success значение и так присваивается глобальной переменной, раз вы утверждаете, что 
Цитата(Evgen24 @  12.1.2013,  00:20 Найти цитируемый пост)
алерт выдает: 2 


До успешного завершения AJAX-запроса move_item_x будет равно -1, это и понятно, ведь вы делаете асинхронный запрос.

Автор: Evgen24 11.1.2013, 20:33
да, но 2 алерт стоит после запроса и выдает -1, в дальнейших вычмслениях тоже -1 используется, как добиться чтобы было значение с аякс запроса?

Автор: Amphiluke 11.1.2013, 20:39
Еще раз: запрос асинхронный. Следовательно, программа не ожидает завершения запроса, и продолжает выполнение сразу после вызова $.ajax. Ф-ция success будет вызвана уже позже, когда будет получен успешный результат от серверного скрипта. Если вам нужно выполнять какие-то действия после получения ответа сервера, выполняйте их из ф-ции success:

Код

function do_something_immediately_after_the_server_says_ok() {
    alert(move_item_x);  
}
$.ajax({
        type: "POST",
        url: "battle_func.php",
        data: {b_item: 4},
        dataType: 'json',
        success: function(data)
        {
            move_item_x = data.ship_x;
            move_item_y = data.ship_y;
            do_something_immediately_after_the_server_says_ok();
            alert(data.ship_x);
        }
        });

Автор: Evgen24 11.1.2013, 21:31
исправил запрос на синхроный:

Код

$.ajax({
        type: "POST",
        url: "battle_func.php",
        data: {b_item: 4},
        dataType: 'json',
        async: false,
        success: function(data)
        {
            var move_item_x = data.ship_x;
            var move_item_y = data.ship_y;
            alert(data.ship_x);
        }
        });    
    
        alert(move_item_x);    


 без изменений

Автор: Amphiluke 11.1.2013, 21:38
Теперь вы зачем-то сделали переменную move_item_x локальной. Ясное дело, что вне ф-ции success она не видна.

Автор: Evgen24 11.1.2013, 21:50
спасибо, заработало

Автор: skyboy 11.1.2013, 23:16
Цитата(Evgen24 @  11.1.2013,  20:31 Найти цитируемый пост)
исправил запрос на синхроный:

не надо бояться ассинхронности.
при не быстром интернете, синхронный запрос завесит браузер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)