Мне нужно использовать переменную вне функции get в jQuery - PullRequest
2 голосов
/ 25 ноября 2011

Рассмотрим этот фрагмент кода:

$('#selectone').change(function(){
    var amount;
    $.get('search.php', {search:'units'}, function(result){
        //this will return only one or zero for me.
        amount = result;
    })
    if(amount>0)
    {
        alert('This option has been selected, please select another one');
    }
})

Моя переменная amount всегда приходит undefined.Как это можно исправить или изменить?

Ответы [ 2 ]

7 голосов
/ 25 ноября 2011

Это потому, что следующий код выполняется перед функцией обратного вызова в вашем запросе $.get():

if(amount>0)
{
    alert('This option has been selected, please select another one');
}

Вызовы AJAX являются асинхронными, что означает, что код вокруг них выполняется, когда вызов AJAX ожидает ответа,Поэтому код if(amount>0) выполняется до срабатывания обратного вызова AJAX (это означает, что для вашего if/then оператора amount всегда будет равно null).

Чтобы сделать то, что вы хотите, я предлагаю поместить этот код внутрьфункция обратного вызова для вашего $.get() запроса:

$('#selectone').change(function(){
    $.get('search.php', {search:'units'}, function(result){
        //this will return only one or zero for me.
        if(result>0)
        {
            alert('This option has been selected, please select another one');
        }
    });
});

- Обновление -

Вы также можете использовать метод jQuery $.when():

$('#selectone').change(function(){
    var amount;
    var jqXHR = $.get('search.php', {search:'units'}, function(result){
        //this will return only one or zero for me.
        amount = result;
    });
    $.when(jqXHR).then(function () {
        if(amount>0)
        {
            alert('This option has been selected, please select another one');
        }
    });
});
0 голосов
/ 25 ноября 2011

Вы не можете просто использовать его внутри функции успеха? Будет лучшим способом:

$('#selectone').change(function(){
 var amount;
    $.post({
        async : false, // this makes it possible
        url: 'search.php', 
        data: {search:'units'}, 
        success : function(result){
            //this will return only one or zero for me.
            amount = result;
        }
    });

    if(amount>0)
    {
        alert('This option has been selected, please select another one');
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...