如何在jquery中从匿名函数返回值

时间:2011-05-24 17:25:40

标签: jquery jquery-selectors

function test() {
    var flag1 = false;
    if ($('#field1').attr('value') || !$('#field1').attr('value')) {
        $.ajaxSetup({
            cache: false
        });
        $.getJSON("test_term.php", {
            'term1': $("#cde").attr('value'),
            'cd3': $("#cde3").attr('value')
        }, function(data) {
            if (data[0].stss == 'K') {
                var status = data[0].stss;
                flag1 = true;

            } else if (data[0].stss == 'U' || data[0].stss == '') {
                flag1 = false;
                return;
            }
        });
    }
    alert("ANonymous value" + flag1);
    return flag1;
}

如何从getJson()中使用的匿名函数返回“flag1”值? 它总是返回false,它被引用到顶部。

3 个答案:

答案 0 :(得分:2)

这是你尝试的方式所不可能的。

Ajax调用是异步的,只要它们准备好就会返回。在外部函数getJSON()完成运行后,您传递给test()的内部函数 well

这意味着 - 无论你想在Ajax调用返回时发生什么 - 将它放入回调函数中。不使用标志和返回值。

E.g。

function do something(flag) {
  // do something
}

function test() {
  if ($('#field1').attr('value') || !$('#field1').attr('value')) {
    $.ajaxSetup({
        cache: false
    });
    $.getJSON("test_term.php", {
        'term1': $("#cde").attr('value'),
        'cd3': $("#cde3").attr('value')
    }, function(data) {
        if (data[0].stss == 'K') {
            var status = data[0].stss;
            doSomething(true);
        } else if (data[0].stss == 'U' || data[0].stss == '') {
            doSomething(false);
        }
    });
  }
}

答案 1 :(得分:1)

问题不在于匿名功能,而在于其异步性。

该方法是在AJAX请求完成时执行的回调。

出于这个原因,你的

alert("ANonymous value" + flag1);
return flag1;

将在回调之前运行,因此该方法尚未更改flag1

在回调方法中,您需要在检索JSON数据后放置您想要发生的任何内容。

答案 2 :(得分:0)

在ajax调用返回之前,回调处理程序不会运行,因此您无法保证将更新flag1。您应该有一个单独的函数被调用以将处理带到下一步。

您可能还有变量范围的问题..您可以将flag1的声明放在函数上方,它将是全局的。