普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项。

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

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

举个生动的例子吧:

同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

再举个例子,打电话时同步,发短信是异步。

ajax的open()方法

用法:open(http-method,url,async,userID,password)

后面是帐号和密码,在禁止匿名访问的http页面中,需要用户名和口令。

ajax.open方法中,第3个参数是设同步或者异步。prototype等js类库一般都默认为异步,即设为true。 先说下同步的情况下,js会等待请求返回,获取status。不需要onreadystatechange事件处理函数。 而异步则需要onreadystatechange事件处理,且值为4再正确处理下面的内容。

首先看看异步处理方式。

其中async是一个布尔值。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式:Flase。

请求方式

GET

最为常见的HTTP请求,普通上网浏览页面就是GET。GET方式的参数请求直接跟在URL后,以问号开始。(JS中用window.location.search获得)。参数可以用encodeURIComponent进行编码,使用方式:

  1. var EnParam = encodeURIComponent(param);
  • URL只支持大约2K的长度,即2048字符数;
  • 使用GET进行AJAX请求时候会缓存导致出现的页面不是正确的,一般方法加random参数值;
  • ajax.send(null)。

POST

向服务器提交数据用到。

  • 需要将form表单中的值先取出转换成字符串,用&符号连接,(同GET传参数一样);
  • 提交数据量2GB;
  • 使用ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'),处理提交的字符串;
  • ajax.send(strings),这个strings表示form中需要提交的内容,例如a=1&b=2类似这样的字符串。

程序示例

同步传输模式:

  1. function RequestByGet(nProducttemp,nCountrytemp)
  2. {
  3. var xmlhttp
  4. if (window.XMLHttpRequest)
  5. {
  6. //isIE = false;
  7. xmlhttp = new XMLHttpRequest();
  8. }
  9. else if (window.ActiveXObject)
  10. {
  11. //isIE = true;
  12. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13. }
  14.  
  15. //Web page location.
  16. var URL="http://www.baidu.com/;
  17. xmlhttp.open("GET",URL, false);
  18. //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=Shift_JIS")
  19. xmlhttp.send(null);
  20. var result = xmlhttp.status;
  21.  
  22. //OK
  23. if(result==200)
  24. {
  25. document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
  26. }
  27. xmlhttp = null;
  28. }

异步传输模式:

  1. var xmlhttp
  2. function RequestByGet(nProducttemp,nCountrytemp)
  3. {
  4. if (window.XMLHttpRequest)
  5. {
  6. //isIE = false;
  7. xmlhttp = new XMLHttpRequest();
  8. }
  9. else if (window.ActiveXObject)
  10. {
  11. //isIE = true;
  12. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13. }
  14.  
  15. //Web page location.
  16. var URL="http://www.baidu.com/";
  17. xmlhttp.open("GET",URL, true);
  18. xmlhttp.onreadystatechange = handleResponse;
  19. //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=UTF-8")
  20. xmlhttp.send(null);
  21. }
  22. function handleResponse()
  23. {
  24. if(xmlhttp.readyState == 4 && xmlhttp.status==200)
  25. {
  26. document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
  27. xmlhttp = null;
  28. }
  29. }

HTTP请求中同步与异步有什么不同的更多相关文章

  1. IO中同步、异步与阻塞、非阻塞的区别

    一.同步与异步同步/异步, 它们是消息的通知机制 1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如si ...

  2. IO中同步、异步与阻塞、非阻塞的区别(转)

    转自:http://blog.chinaunix.net/uid-26000296-id-3754118.html 一.同步与异步同步/异步, 它们是消息的通知机制 1. 概念解释A. 同步所谓同步, ...

  3. Linux中同步与异步、阻塞与非阻塞概念以及五种IO模型

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

  4. 关于HTTP请求、Ajax请求,请求的同步和异步

    使用了很长时间的Ajax请求了,一直都是在以异步的方式在使用.昨天听了一个讲座涉及到apache server,偶然想到了这Ajax请求和HTTP请求的一些区别和联系,就在网上好好搜了一顿,把搜到的结 ...

  5. 转 WCF中同步和异步通讯总结

    我这样分个类: WCF中, 以同步.异步角度考虑通讯的方式分为四种:跨进程同步.跨进程异步.发送队列端同步.发送队列端异步.之所以造成这样的结果源于两个因素,一个是传统概念上的同异步,一个是对于WCF ...

  6. 在JavaScript中同步与异步

    在JavaScript中,一个线程执行的时候不依靠其他线程处理完毕我们称为异步,相反一个线程必须等待直到另一个线程处理完毕我们则称为同步.打个比方: (1)同步就是你在煮方便面的时候必须等水开了,你才 ...

  7. JS中同步和异步

    首先,我们要知道,JavaScript的本质是一门浏览器脚本语言,在执行的时候是一行一行的执行,只有前面的代码执行完了才会执行后面的代码.JS是单线程语言指的就是这个意思. 同步和异步其实在进行任务执 ...

  8. js中同步与异步请求方式

    异步请求方式: $.ajax({ url : 'your url', data:{name:value}, cache : false, async : true, type : "POST ...

  9. js中同步与异步处理方法

    在使用异步请求时,有时需要将异步请求的结果返回给另一个js函数,此种情况下会出现未等异步请求返回请求结果,该发送请求所在js函数已经执行完后续操作,即已经执行return ,这样会导致return的结 ...

随机推荐

  1. Linux下编译出现undefined reference to ‘pthread_create’问题解决

    1.代码 /* * File: HeartPackageSendAgent.cpp * Author: Pangxiaojian * * * 主要实现:向服务器发送心跳包,每5s向服务器发送一个心跳包 ...

  2. 45-Identity MVC:注册逻辑实现

    1-注册页Register.cshtml <h3>Register</h3> @model MvcCookieAuthSample.ViewModel.RegisterView ...

  3. Mac系统下安装Homebrew后无法使用brew命令,-bash: brew: command not found

    使用如下命令: sudo vim .bash_profile 然后输入以下代码: export PATH=/usr/local/bin:$PATH 再使用以下命令使配置生效: source .bash ...

  4. Qt的index 用方法static_cast<CTableItem*>(index.internalPointer())取出来的值的成员都未初始化

    mediaData = 0x01046380 {m_Deviceid={...} m_Title={...} m_Type={...} ...} 里面是这样的值,内存已经释放,但是没有remove:

  5. PowerMock简单使用

    网上有很多PowerMock的介绍,此处就不再罗列 下面给出一些资源地址以及几篇案例 mockito资源: (1)源码:https://github.com/mockito/mockito power ...

  6. springmvc常用jar包

    <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans ...

  7. 免费天气预报API接口

    一.中国气象局(http://www.weather.com.cn) 1.实时接口 http://mobile.weather.com.cn/data/sk/101010100.html http:/ ...

  8. App测试基本流程详解

    1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间. 1.3测试资 ...

  9. 系统学习Docker 践行DevOps理念

    Docker代表的容器技术是近两年的大热技术,和人工智能.区块链等热点不同,容器技术的门槛并不高,每一个开发.测试.运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一.本课程会带大家 ...

  10. 在阿里云上遇见更好的Oracle(二)

    从上一篇文章的反馈来看,大家还是喜欢八卦多过技术细节,那这一篇继续一些题外话,说说我对“去IOE”的看法. 对同一件事情,参与的没参与的人,讨论起来,都会有各自的立场.所以这里先申明一下,以下内容只是 ...