可能重复:
返回 AJAX 回调返回
我已经使用 AJAX 制作了一个 JQuery 代码,但尽管我付出了所有努力(尝试和$.post
) ,但我无法得到任何响应,也无法在我的代码中使用它。示例代码:$.get
$.ajax
var r = $.post("ajaxpage.php", function(data) {return data});
console.log(r); // nothing
可能重复:
返回 AJAX 回调返回
我已经使用 AJAX 制作了一个 JQuery 代码,但尽管我付出了所有努力(尝试和$.post
) ,但我无法得到任何响应,也无法在我的代码中使用它。示例代码:$.get
$.ajax
var r = $.post("ajaxpage.php", function(data) {return data});
console.log(r); // nothing
初学者程序员对 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);
});
编辑:我不是以英语为母语的人,请原谅我的错误。