Ajax getJSON成功函数超出范围

Ajax getJSON成功函数超出范围,ajax,jquery,getjson,Ajax,Jquery,Getjson,我刚刚开始使用jquery编写AJAX函数。我在这里调用myfunction()。其中check.php返回myfunction始终为其返回的{“count”:1}或{“count”:0}。但是对于{“count”:1}它应该返回true。我不知道我错在哪里。下面是我正在使用的代码 function myfunction(){ var retval=false; if($('#tag').val() != ''){ var query=$( "#tag" ).val(); $.g

我刚刚开始使用jquery编写AJAX函数。我在这里调用
myfunction()
。其中check.php返回myfunction始终为其返回的
{“count”:1}
{“count”:0}
。但是对于
{“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;
}

请帮助我理解这一点

这是一个AJAX(异步)请求,因此
返回retval在AJAX成功函数执行之前返回,因此总是返回false。在返回并使用
retval

之前,您需要更改实现以等待该请求,这是因为,
$.getJSON(..)
是异步的。下面是jquerydoc对您正在传递的第三个参数(
function(data){…}
)的说明:

success(data,textStatus,jqXHR):一个回调函数,在请求成功时执行

AJAX调用成功时,执行将
retval
设置为true的函数;调用
myfunction()

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

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