【问题标题】:How can I get returning data from jquery ajax request?如何从 jquery ajax 请求中获取返回数据?
【发布时间】:2010-05-25 04:40:30
【问题描述】:
function isNewUsername(str){
    var result;
    $.post('/api/isnewusername', 
            {username:str},
            function(data) {
                result = data.result;
            }, 
            "json");
    return result;
}

所以,我的问题很简单,但我想不通。我想访问 isnewusername 函数的结果。我对答案很好奇,因为我花了 1 个小时在上面。 谢谢

【问题讨论】:

  • 你不能像那样返回那个函数。 $.post 是异步的,该函数将在对服务器文件的调用完成之前返回。使用异步 AJAX 调用。
  • 这似乎是一个常见问题。在进行异步调用后,有许多与函数返回值相关的问题。我用"return-value" 标记这个以合并类似的问题。 javascript+ajax+return-value 是一个很好的组合,可以涵盖这个问题和所有类似的问题。

标签: javascript jquery ajax api return-value


【解决方案1】:

无法按照您的方式完成,因为 ajax 查询是异步的(也就是说,它们不会阻塞,结果不会立即出现,它会在服务器实际响应时出现)。您必须使用结果调用另一个函数(否则,只有在结果实际可用时才对结果执行某些操作)。

例如:

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

【讨论】:

  • 实际上它们可以同步,在这种情况下它们阻塞,但我相信它仍然不能按照OP想要的方式完成。
【解决方案2】:

当您使用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,但这可能会锁定用户浏览器,直到请求返回。

【讨论】:

  • 有潜力...确实会锁定浏览器
  • @redsquare 没错,但与锁相关的长度和痛苦取决于多种因素。
  • 但它总是有可能永远不会返回响应......让用户崩溃浏览器。我永远不会使用。
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多