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

时间:2012-11-24 13:46:03

标签: 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>

1 个答案:

答案 0 :(得分:7)

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

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

就是这样!唯一可能对你来说有点神秘的是这一行:

xmlhttp.onreadystatechange=function()

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

  • UNSENT(0)
  • OPENED(1)
  • HEADERS_RECEIVED(2)
  • LOADING(3)
  • 完成(4)

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

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

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