-4

可能重复:
返回 AJAX 回调返回

我已经使用 AJAX 制作了一个 JQuery 代码,但尽管我付出了所有努力(尝试$.post) ,但我无法得到任何响应,也无法在我的代码中使用它。示例代码:$.get $.ajax

var r = $.post("ajaxpage.php", function(data) {return data});
console.log(r); // nothing
4

1 回答 1

4

初学者程序员对 Javascript 和 AJAX 最常见的误解之一是将 AJAX 请求视为“正常”函数,进行变量赋值或期望在其代码中立即使用 AJAX 响应。

但这不是它的工作方式。让我们尝试了解正确的实现是如何工作的。

AJAX代表 异步 JavaScript 和 XML

我们将暂时忽略 XML 部分(更多关于请求是如何进行的, via XMLHttpObject),Javascript 部分非常明显(它是我们使用的脚本语言,有或没有 JQuery),让我们关注异步

以这种方式思考 AJAX:它大致就像您在工作时向同事发送工作电子邮件并提供一些信息;并要求采取行动和/或其他信息作为回报;无论您的朋友是否立即回答,您仍然必须继续工作,因为回答可能会延迟(您的朋友今天可能特别忙)。当您的朋友回答相关信息时,才会解决问题并采取适当的措施。如果要求采取行动,您的同事只有在收到您的电子邮件时才会继续执行。

AJAX 以类似的方式工作:从客户端,您向服务器端页面发出请求,并期待一个操作(例如在数据库中写入一行)或响应(从您的页面获取服务器端的一些数据)正在打电话。

重要的是,无论往返是否完成,您的 JavaScript 代码都会继续执行,因为当您的客户端(请记住 JS 在客户端运行)对服务器进行 AJAX 调用(服务器速度慢、连接速度慢等)。

所以你不能指望做这样的事情:

var r = $.post("ajaxpage.php", function(data) {return data});

因为$.post实际上并没有像“常规”函数那样“返回”一个值,所以该变量r不能被 $.post 赋值

相反,您应该根据done事件组织代码,该事件在 AJAX 调用完成后触发:它保证(如果没有失败,如服务器端错误、未找到页面等)我们实际上有一个成功时在您的代码中使用的响应。通过该事件,我们可以调用一个函数,该函数将响应作为参数接收并实际使用它。

$.post("ajaxpage.php").done(useMyResponse);
// rest of the code

function useMyResponse(response)
{
    // do fancy things with the response like:
    console.log(response); // works!
    // or maybe
    $("#someElement").html(response);
}

对此的简写是:

$.post("ajaxpage.php",function (response) { 
     // use response
     console.log(response);
});

编辑:我不是以英语为母语的人,请原谅我的错误。

于 2012-06-21T21:09:36.950 回答