从jquery ajax调用返回

时间:2010-05-16 18:01:13

标签: jquery ajax return-value

我正在尝试在我自己的函数中使用jQuery ajax调用的返回,但它一直返回undefined。

function checkUser2(asdf) {
    $.ajax({
        type: "POST",
        async: false,
        url: "check_user.php",
        data: { name: asdf },
        success: function(data){ 
            return data;
            //alert(data);
        }
    });  
}

$("#check").click(function(){
    alert(checkUser2("muma"));
});

ajax调用肯定有效,因为当我取消注释警报时,我得到了正确的返回,我可以在firebug中看到它。我做了些蠢事吗?

4 个答案:

答案 0 :(得分:7)

AJAX调用是异步的 - 这意味着AJAX请求是通常的程序执行顺序,而在程序中,这意味着checkUser2()没有将数据返回到警报。

您不能以这种方式使用来自$.ajax()调用的返回值,而是将使用AJAX返回数据的代码移动到success()函数 - 它的用途。

答案 1 :(得分:3)

我认为你可以做到这一点:

function checkUser2(asdf) {
  var s = $.ajax({
        type: "POST",
        async: false,
        url: "check_user.php",
        data: { name: asdf },
        success: function(data){ 
            return data;
            //alert(data);
        }
    }).responseText;  
   return s;
}       

但是,正如jquery doc page for ajax function中的第4个例子所说,我认为

  

请求处于活动状态时阻止浏览器。最好是阻止用户交互>通过其他方式进行同步时。

答案 2 :(得分:1)

请改为尝试:

 function checkUser2(asdf) {
    var result;
    $.ajax({
        type: "POST",
        async: false,
        url: "check_user.php",
        data: { name: asdf },
        success: function(data){ 
            result = data;            
        }
    });
    return result;  
}       


$("#check").click(function(){
    alert(checkUser2("muma"));
});

您可能必须将结果变量作为全局javascript变量移出。我还没有测试过这个。

答案 3 :(得分:0)

您还可以使用jQuery的数据方法存储“数据”,并将其与全局jQuery对象或本地jQuery选择器相关联。例如,

success: function(data) {
  $.data('result', data);
}

可以使用

在任何地方访问返回值
$.data('result')

你也可以将它与一个局部变量(例如$('#myid')。data())相关联,这样它就是该对象的本地变量,而不是全局范围。