$ .ajax,$。post或$ .get将无法运行,无法使用响应

时间:2012-06-21 21:09:35

标签: javascript jquery ajax

  

可能重复:
  return AJAX callback return

我使用AJAX创建了一个JQuery代码,但尽管我付出了很多努力(尝试$.post$.get $.ajax),我无法获得任何回复,也不在我的代码中使用它。 示例代码:

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

1 个答案:

答案 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);
});

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