getJSON成功函数超出范围

时间:2012-12-08 17:13:35

标签: ajax jquery getjson

我刚开始使用jquery编写AJAX函数。我在这里打电话给myfunction()。 check.php返回{"count":1}{"count":0},其中myfunction始终返回retval=false。但是对于{"count":1},它应该返回true。我不知道我哪里错了。以下是我正在使用的代码。

function myfunction(){
var retval=false;
if($('#tag').val() != ''){
    var query=$( "#tag" ).val();
    $.getJSON("check.php",{
        q: query
    },function(data){
        if(data.count==0){
            $('#formerrormsg').html('Error msg');
        }
        else{
            retval=true;
        }
    });
}
return retval;
}

请帮我理解这一点。

2 个答案:

答案 0 :(得分:2)

这是因为,$.getJSON(..) 异步。以下是jQuery doc关于你传递的第三个参数(function(data){...})的说法:

  

成功(data,textStatus,jqXHR):如果请求成功,则执行回调功能。

当AJAX调用成功时,执行将retval设置为true的函数;不是在你拨打myfunction()

有两种方法可以解决这个问题:

  • 让您的AJAX调用同步;在收到响应之前,函数不会返回。 (不是一个好主意,UI可能会冻结)
  • 修改代码 - 异步方式。通常,从定义为第3个参数的“成功函数”中调用函数(理想情况下取决于返回值)。

答案 1 :(得分:0)

这是一个AJAX(异步)请求,因此{AJ}成功函数执行前会返回return retval;,因此总是返回false。在返回并使用retval之前,您需要更改实施以等待该请求。