XMLHttpRequest的同步和异步请求

原创 2004年09月24日 01:52:00

客户端利用XMLHTTP发送请求得到服务端应答数据,并用Javascript操作DOM最终更新页面- 又称无刷新更新页面,有代替传统web开发中采用form(表单)递交方式更新web页面的趋势。

XMLHTTP依赖于XMLHttpRequest完成从客户端的请求到服务端的应答。XMLHttpRequest提供了两个方法open和send。open方法用于初始化XMLHttpRequest
对象、指示请求的方式(get、post等)、安全性连接等,在调用open方法后必须调用send方法发送Http Request(Http请求)以返回Http Reponse(Http应答)。
看MSDN中对send方法的简介:
This method is synchronous or asynchronous, depending on the value of the bAsync parameter in the open call. If open is called with bAsync == False, this call does not return until the entire response is received or the protocol stack times out. If open is called with bAsync == True, this call returns immediately.
send方法是否同步或异步工作取决于open方法中的bAsync参数,如果bAsync == False表示send方法工作在同步状态下,发送http请求后,只有当客户端接收到来自服务端的全部应答数据或协议栈超时返回!反之bAsync == True,工作在异步状态下,直接返回。

实际运用中,设置bAsync = True, 使send方法被调用后XMLHttpRequest工作在异步状态,如果设为同步状态可能会导致不必要的长时间等待!

另外,无论在同步或异步请求工作状态下,XMLHttpRequest如何得到由服务端返回的应答数据?
看下面的示例代码:

<script>
var xmlhttp=null;
function PostOrder(xmldoc)
{
  varxmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  xmlhttp.Open("POST", "http://myserver/orders/processorder.asp", false);
  xmlhttp.onreadystatechange= HandleStateChange;
  xmlhttp.Send(xmldoc);
}
function HandleStateChange()
{
  if (xmlhttp.readyState == 4)
  {
    alert("Result = " + xmlhttp.responseXML.xml);
  }
}
</script>

服务端返回应答数据并完全被加载, 可通过XMLHttpRequest属性readState获知,其值变为4 - COMPLETED (已加载完成),
当readState变化时会调用XMLHttpRequest对象中的回调函数onreadstatechange,在函数中验证xmlhttp.readyState == 4,
这里得到的是XML文档(如果服务端有返回xml文档数据).

用XMLHTTPRequest来进行ajax异步数据交交互

XMLHTTPRequest 进行ajax异步数据交互
  • z_l_ming
  • z_l_ming
  • 2017年02月10日 13:04
  • 576

XMLHttpRequest实现终止请求和超时

这里是使用的XMLHttpRequest2中的API,口蹄疫通过XMLHttpRequest对象的 abort( )方法 来取消正在进行的HTTP请求,abort( )方法是在XMLHttpReque...
  • NextStand
  • NextStand
  • 2016年04月15日 17:21
  • 7591

XMLHttpRequest的同步和异步请求

客户端利用XMLHTTP发送请求得到服务端应答数据,并用Javascript操作DOM最终更新页面- 又称无刷新更新页面,有代替传统web开发中采用form(表单)递交方式更新web页面的趋势。XML...
  • yjgx007
  • yjgx007
  • 2004年09月24日 01:52
  • 2119

XMLHttpRequest 异步方式和同步方式

Js代码   function doAction() {      var xmlHttp = GetXmlHttpObject()        if (xmlHttp == null) { ...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年09月23日 11:51
  • 5184

Ajax之同步请求和异步请求的区别

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的。信息错误又要重新填写! 异步是指:发送...
  • xiaotao_css
  • xiaotao_css
  • 2017年04月25日 18:34
  • 6439

ajax请求超时设定

jquery ajax超时设置 var ajaxTimeoutTest = $.ajax({   url:'',  //请求的URL   timeout : 1000, //超时时间...
  • zhaolisha9232
  • zhaolisha9232
  • 2017年05月25日 10:58
  • 375

为ServerXMLHTTP对象的HTTP请求设置超时时间

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:07
  • 90

Okhttp之同步和异步请求简单分析

Okhttp同步和异步请求流程分析
  • chunqiuwei
  • chunqiuwei
  • 2017年08月11日 23:05
  • 1043

Web_Http同步和异步请求区别

举个例子:普通B/S模式(同步)AJAX技术(异步)  同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事  异步: 请求通过事件触发->服务器处理(这是浏...
  • u010003835
  • u010003835
  • 2016年05月07日 17:24
  • 897

Ajax异步访问远程服务并设置超时

输入卡号: 验证结果: var xmlHttp=null; var havereturn=false; function showHint(str) { if (str.length==0)...
  • HF2905330
  • HF2905330
  • 2011年11月14日 10:36
  • 526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XMLHttpRequest的同步和异步请求
举报原因:
原因补充:

(最多只允许输入30个字)