0

我刚刚开始使用 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;
}

请帮助我理解这一点。

4

2 回答 2

2

那是因为,$.getJSON(..)异步的。以下是 jQuery 文档关于您传递的第三个参数 ( function(data){...}) 的说明:

success(data, textStatus, jqXHR):请求成功时执行的回调函数。

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

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

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

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

于 2012-12-08T17:20:18.953 回答