2010-05-16 119 views
5

我想在我自己的函数中使用从jQuery ajax调用返回,但它一直返回undefined。从jquery返回ajax调用

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调用肯定工程,因为当我取消我的警觉我得到正确的回报,我可以看到它在萤火虫。我在做一些愚蠢的事情吗?

回答

7

AJAX调用是异步的 - 这意味着AJAX请求的顺序与通常的程序执行无关,并且在您的程序中,这意味着checkUser2()不会将数据返回到警报。

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

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变量来代替。我还没有测试过。

+1

但是,同步ajax是一个非常糟糕的主意。 – Pointy 2012-02-24 12:27:51

+0

我同意,但这是解决OP问题的方法。而且他已经以异步方式使用ajax函数。 – Falle1234 2012-02-24 12:59:25

+0

这种方式对我也不起作用。 $(“#submitPO”)。click(function(){alert(updatePO(“444”)); });未能弹出警报。我的功能与您的功能相同。 – 2012-04-12 22:25:02

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的第四例子说,我认为

块的浏览器,同时请求被激活。当需要同步时,通过其他方式阻止用户交互更好。

+0

这解决了我在几乎完全相同的场景中遇到的问题,因为“async:false”是停止异步调用的关键部分。 – 2011-08-23 11:15:37

0

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

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

返回值可以在使用

$.data('result') 

任何地方访问你也可以此关联到一个本地变量(如:$(“#身份识别码”)。数据()),以便其局部于该对象而不是全局范围内。

+0

我试着用你的建议。我无法让它工作。 $(“#submitPO”)。click(function(){alert($。data('result')); });什么也没做。 – 2012-04-12 22:22:13