我使用AJAX创建了一个JQuery代码,但尽管我付出了很多努力(尝试$.post
,$.get
和 $.ajax
),我无法获得任何回复,也不在我的代码中使用它。
示例代码:
var r = $.post("ajaxpage.php", function(data) {return data});
console.log(r); // nothing
答案 0 :(得分:4)
初学者程序员对Javascript和AJAX最常见的误解之一就是将AJAX请求视为“正常”函数,进行变量赋值或期望在代码中立即使用AJAX响应。
但这不是它的工作原理;让我们试着理解正确的实现是如何工作的。
AJAX 代表异步JavaScript和XML 。
我们将暂时忽略XML部分(更多关于如何通过XMLHttpObject
进行请求),Javascript位非常明显(它是我们使用的脚本语言,有或没有JQuery ),让我们关注异步。
以这种方式思考AJAX:它大致就像向同事发送工作电子邮件,当你在工作,并提供一些信息;并要求采取行动和/或其他信息作为回报;无论你的朋友是否立即回答,你仍然需要继续工作,因为答案可能会延迟(你的朋友今天可能特别忙)。 当您的朋友使用相关信息回答时,只有然后您将解决此问题并采取适当的措施。如果要求采取行动,您的同事只有在收到您的电子邮件时才会开启。
AJAX以类似的方式工作:从客户端,您将请求发送到服务器端页面,并期望 action (比如在数据库中写一行)或响应(从你正在调用的页面中获取服务器端的一些数据。
重要的一点是你的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);
});
编辑:我不是母语为英语的人,请原谅我的错误。