AJAX真的是异步的吗?

时间:2014-07-28 11:11:14

标签: javascript ajax asynchronous

当您触发ajax调用时,我们通常在浏览器端代码中执行的操作是使用“xmlhttp”变量并检查状态更改,直到加载响应为止,这意味着客户端维护某种连接/线程到服务器和服务器通过该连接响应客户端。我看到的唯一区别是页面没有刷新,这让我想到了一个非常基本的问题,ajax真的是异步的吗?

与发送请求的JMS相比,客户端和服务器之间绝对没有连接,并且响应是通过服务器发起的不同线程发送的。不是JMS真的是异步的。我糊涂了。有人可以澄清一下。

3 个答案:

答案 0 :(得分:14)

AJAX被认为是异步的,因为等待请求不会阻止页面的用户界面。换句话说:当你发送一个whatsapp消息并且你主动等待回复时,你正在做同步请求:无论你的妻子是否要求你去睡觉。在得到答复之前你不会上床睡觉。但是如果你发送邮件而你还想做其他的事情,比如和你的妻子上床,那么你会做一个异步请求:你会在电话响铃时看到这条消息(一个AJAX onload事件)。

网页的UI线程将是您的妻子。

答案 1 :(得分:1)

取决于你对“异步”的定义,但在这种情况下,想象它更好“非阻塞”。允许您发送多个请求,而不会阻止页面上的其他内容,并在收到响应时收到响应。请求和响应之间没有任何阻塞的时间间隔是它在编程中“异步”的原因。当然,它受Web浏览器内部管理的HTTP会话和超时的限制,它定义了请求和响应之间允许的最大时间延迟。

答案 2 :(得分:0)

这与我的理解密切相关。可能是我不正确。异步 - 意味着没有按照w.r.t时间测量的相同顺序发生。所以真正的问题是异步的什么?它是异步请求 - 响应,是异步Java脚本执行,是异步方法调用。

考虑到这个概念,当我看到AJAX时,它确实是异步的,这意味着它是异步Java脚本执行。 " XMLHTTP"用法本身是JS引擎下的同步http请求 - 响应。 另一方面,JMS是异步请求 - 响应,我认为不应该与Javascript的执行混淆。

这有意义吗?我们可以这样理解吗?

鉴于此, 我认为我们应该将AJAX扩展为异步JAvascript执行,而不是异步JAvascript和Xml。