在Ajax调用期间会发生什么?

3 ajax jquery ajaxcontroltoolkit ajax4jsf

你能不能告诉我在ajax中浏览器背后的什么...我只是知道没有刷新页面所有的数据都加载....

这是我的代码

<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
}
</script>
Run Code Online (Sandbox Code Playgroud)

Lev*_*lho 6

当您发出AJAX请求时,您的浏览器会向给定地址发送HTTP请求.请求另一端的服务器响应,并将数据返回给您的浏览器.这与导航到新网页时发生的情况相同.

使AJAX与众不同的是,它不是导航到新页面并直接显示它,而是将响应数据包含在JavaScript变量中.然后可以使用JavaScript操作此变量并动态插入页面.

就是这个!唯一可能对你来说有点神秘的是这条线:

xmlhttp.onreadystatechange=function()
Run Code Online (Sandbox Code Playgroud)

这样做是将事件附加到xmlhttp实际执行请求的对象.每次对象的"就绪状态"发生变化时,事件都会触发."就绪状态"是请求状态的状态指示符.AJAX请求通常经历五个阶段:

  • UNSENT(0)
  • 已开放(1)
  • HEADERS_RECEIVED(2)
  • 装载(3)
  • 完成(4)

在请求进入"完成"阶段之前,您的数据无法使用.通过检查就绪状态代码4,您有效地检查请求是否已完成.请注意,在某些浏览器中,您还可以使用上面定义的常量检查状态,但因为常量并非在所有浏览器中普遍定义(Opera是一个值得注意的例外),但最好还是坚持检查数字代码.

值得一提的是,并非所有就绪状态都必须可以从所有浏览器访问.代码4几乎是一个安全的赌注,但一些早期的代码并不总是实现.本文对此主题进行了更深入的介绍:http://www.ibm.com/developerworks/web/library/wa-ajaxintro3/.

您与就绪状态代码一起检查的另一件事是HTTP状态代码.您检查它是否等于200,因为代码200意味着请求正常执行.当请求未成功完成时,其他代码将返回给您.可以在http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html找到HTTP代码列表.