2010-05-25 95 views
0
function isNewUsername(str){ 
    var result; 
    $.post('/api/isnewusername', 
      {username:str}, 
      function(data) { 
       result = data.result; 
      }, 
      "json"); 
    return result; 
} 

所以,我的问题很简单,但我无法弄清楚。我想要访问isnewusername函数的结果。我对答案非常好奇,因为我花了1个小时。 谢谢我怎样才能从jquery ajax请求返回数据?

+0

你不能像那样返回那个函数。 $ .post是异步的,该函数将在调用服务器文件之前返回。使用异步AJAX调用。 – Ben 2010-05-25 04:47:15

+0

这似乎是一个常见问题。在进行异步调用之后,函数的返回值有很多问题。我用''return-value''来标记这个以整合类似的问题。 'javascript + ajax + return-value'是一个足够好的组合,可以涵盖这个和所有类似的问题。 – Anurag 2010-05-25 04:58:28

回答

0

,当您使用快速记下jQuery post function您正在使用的jQuery ajax function的简写形式,这意味着你正在做的异步调用。因此,只有在成功响应时,jQuery才会调用您的函数,并将您服务器端调用的结果放入成功回调的data参数中。

举例说明:

function isNewUsername(str){ 
    $.post('/api/isnewusername', 
      {username:str}, 
      function(data) { 
       alert(data.result); 
      }, 
      "json"); 
} 

这就是说你可以改变你的代码,以指定a synchronous callback但具有直到返回请求锁定用户浏览器的潜力。

+0

有潜力...它锁定浏览器 – redsquare 2010-05-25 05:16:49

+0

@redsquare正确,但与锁相关的长度和疼痛取决于各种因素。 – ahsteele 2010-05-27 17:55:10

+0

但它始终有可能让回复永远不会回来......让用户崩溃掉浏览器。我永远不会使用。 – redsquare 2010-05-27 22:47:57

2

由于ajax查询是异步的(这意味着,它们不会被阻塞,并且结果不会立即发生,它会在服务器实际响应时发生)。你必须调用另一个函数的结果(否则,只有在结果实际可用时才做结果)。

例如:

function isNewUsername(str){ 
    $.post('/api/isnewusername', 
      {username:str}, 
      function(data) { 
       someOtherFunction(data.result); 
      }, 
      "json"); 
} 
+0

其实他们可以做到同步,在这种情况下他们*做*块,但我相信它仍然不能按照OP想要的方式完成。 – nc3b 2010-05-25 04:46:48