ajax的异步和同步请求的问题

Posted 点石成金技术共享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax的异步和同步请求的问题相关的知识,希望对你有一定的参考价值。

1、ajax是什么?

— AJAX全称为“Asynchronousjavascript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术。

— 不是一种新技术,是如下几种技术的组合应用:

  • 基于web标准(standards-basedpresentation)Xhtml+CSS的表示;

  • 使用 DOM(DocumentObject Model)进行动态显示及交互;

  • 使用 XML 和 XSLT 进行数据交换及相关操作;

  • 使用 XMLHttpRequest 进行异步数据查询、检索;

  • 使用 JavaScript将所有的东西绑定在一起。

— Ajax本质上是一个浏览器端的技术。


Ajax的作用

1. 通过异步模式,提升了用户体验

2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用

3. Ajax 在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。


Ajax 同步和异步的区别:

    先看代码

var flag=true;var index=0;$.ajax({ url: "//www.jb51.net/", success: function(data){ flag=false; } });while(flag){ index++;}alert(index);

请问最后alert的index的结果是多少?

    可能有人会说0呗。实际上却没那么简单。大家可以自己试试看。可以看到最终程序进入了一个死循环!怎么会这样呢!


我们在看一段代码

var flag=true;$.ajax({ url: "//www.jb51.net/", success: function(data){ flag=false; } });alert(flag);

    大家看最后alert出flag的值是多少呢?没错,是true!为什么呢?明明我们在ajax请求成功了将flag设为false,怎么还是true呢?这实际上是Ajax的异步机制造成的。


    这里解释一下,同步和异步。js是单线程的,由于执行ajax请求会消耗一定的时间,甚至出现了网络故障而迟迟得不到返回结果;这时,如果同步执行的话,就必须等到ajax返回结果以后才能执行接下来的代码,如果ajax请求需要1分钟,程序就得等1分钟。如果是异步执行的话,就是告诉ajax代码“老兄,既然你迟迟不返回结果,我先不等你了,我还有一大堆代码要执行,等你执行完了给我说一下”。


Ajax 同步和异步的区别:

    1. 同步:提交请求 -> 等待服务器处理 -> 处理完毕返回,这个期间客户端浏览器不能干任何事

    2. 异步:请求通过事件触发 -> 服务器处理(这是浏览器仍然可以作其他事情)-> 处理完毕


    Ajax默认是异步请求的,所以就出现了上面我们看到的结果。也就是ajax里面的代码还没有执行完,先执行了下面的代码。

那么如何使Ajax执行同步请求呢?这就需要设置async。


var flag=true;var index=0;$.ajax({ url: "//www.jb51.net/", async:false, success: function(data){ flag=false; } });while(flag){ index++;}alert(index);


async默认是true,也就是异步,我们设置为false,即为同步。这时我们再看看结果吧。


2、请描述ajax的交互模型



浏览器的普通交互方式



浏览器的Ajax交互方式


3、http状态码

100 Continue  继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息

200 OK   正常返回信息

201 Created  请求成功并且服务器创建了新的资源

202 Accepted  服务器已接受请求,但尚未处理

301 Moved Permanently  请求的网页已永久移动到新位置

302 Found  临时性重定向

303 See Other  临时性重定向,且总是使用 GET 请求新的 URI

304 Not Modified  自从上次请求后,请求的网页未修改过

400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求

401 Unauthorized  请求未授权

403 Forbidden  禁止访问

404 Not Found  找不到如何与 URI 相匹配的资源

500 Internal Server Error  最常见的服务器端错误

503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)



以上是关于ajax的异步和同步请求的问题的主要内容,如果未能解决你的问题,请参考以下文章

ajax中的async属性值之同步和异步及同步和异步区别

ajax同步与异步的区别

ajax的同步与异步

ajax同步异步

js中请求数据的$post和$ajax区别(同步和异步问题)

Ajax同步异步请求