日期:2014-05-17  浏览次数:20898 次

一个 Http Get 请求的问题
首先列出代码:
  var httprequest = new XMLHttpRequest();
  var time = new Date();
  if (httprequest) {
  for (var i = 0; i < 1; i++) {
  httprequest.onreadystatechange = function () {
  if (httprequest.readyState == 4) {
  alert("OK");
  }
  };
  httprequest.open("GET", http://www.baidu.com, false);
  httprequest.send(null);
  }
  }
  alert(new Date() - time);

代码功能:
代码使用 ajax HTTP GET 请求百度主页,readyState 等于 4 后,alert 弹出对话框提示成功,然后再弹出对话框显示此次 HTTP GET 请求所消耗的时间。

下面便是问题所在:
对于 IE8 浏览器:先弹出 OK 对话框,然后弹出消耗时间对话框。一切正常。
对于 Chrome10 浏览器:只弹出了 OK 对话框,没有弹出消耗时间对话框。抓包发现请求已经发送成功了。
对于 Firefox3.6 浏览器:任何对话框都没有弹出。抓包发现请求已经发送成功了。

现在问题是,为啥 Chrome10、Firefox3.6 不会如期的弹出对话框呢?实际上相应代码是运行到了的。

------解决方案--------------------
JScript code
httprequest.open("GET", http://www.baidu.com, false);

------解决方案--------------------
我FF显示的是这样子的错,求高手解答:
uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Documents%20and%20Settings/Administrator/%E6%A1%8C%E9%9D%A2/b.html :: <TOP_LEVEL> :: line 12" data: no]
------解决方案--------------------
这个原因说不清楚……但是你为什么要这么做?
open第三个三处设为false的话是同步调用,这样alert(new Date() - time)取到的肯定比实际耗费的时间要长,因为之前弹窗一次,确定之后它才能得到执行
如果想想显示请求所耗费的时间 直接在回调方法中写就行了