Ajax getJSON成功函数超出范围
我刚刚开始使用jquery编写AJAX函数。我在这里调用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
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”中调用函数(理想情况下取决于返回值)