返回值jquery函数

时间:2012-03-23 04:19:39

标签: jquery

使用以下代码,它应该警告“一个”然后“两个”。按.button时,仅提醒“一个”。 var got未返回.button函数。

$('.button').live('click',function() {
var got = fetchvalue('100');

   if(got==1) {
    alert('two');

   }

});


function fetchvalue(id) {

    $.getJSON('/fetchvalue.php?id='+id+'&w=1',function(data) {

alert('one');       
    var got=1;                  

    });

    return got;
}

2 个答案:

答案 0 :(得分:5)

getJSON是异步的,这意味着在此调用语句中不可能立即获取返回值,因此您的代码应为:

$('.button').live('click',function() {
    fetchvalue('100', function(got) { // add a callback
        if (got == 1) {
            alert('two');
        }
    });
});


function fetchvalue(id, callback) {
    $.getJSON('/fetchvalue.php?id='+id+'&w=1',function(data) {
        alert('one');       
        var got=1;
        callback(got); // invoke the callback
    });

    // no return is required
}

答案 1 :(得分:0)

那是因为你的变量got的范围是你的JSON返回函数(即你不能在JSON回调函数之外访问它),加上JSON异步加载。您可以使用$ .ajax调用并将async设置为false,这具有相同的效果但没有异步加载,这意味着您在回调中设置的任何变量都不会(有效地)作用于它。

function fetchvalue(id) {
    var got;
    $.ajax({

        url: '/fetchvalue.php?id=' + id + '&w=1',
        dataType: 'json',
        async: false,
        data: myData,
        success: function(data) {
            alert('one');
            got = 1;
        }
    });

    return got;
}​
相关问题