这是我关于stackoverflow的第一篇文章,它涉及到我在尝试学习Ajax基础知识时遇到的问题。
这是方案: 我创建了一个带有嵌入式脚本的HTML文件 剧本 ... - 创建XMLHttpRequest对象 - 调用open()来分配HTTP方法和URL - 将事件处理程序分配给onreadystatechange 属性 - 发送请求
请求是什么? 该请求只是转到同一主机上的本地Web服务器(Apache)来运行php脚本。 php脚本创建一个XML文件,并使用单个值填充文件,这是服务器上的时间。
客户对响应做了什么? 事件处理程序使用DOM从XML中提取时间值,并将其作为innerHTML插入到div元素中。
什么不起作用? 实际上它在IE8中运行良好,但我无法在Firefox中使用它!
什么工作,什么没有? 正在发送请求,并且确实在IE8和Firefox中调用了事件处理程序。 IE8在网页上精美填充div,而在Firefox中,XMLHttpRequest对象似乎是空的;也就是说,readyState正在更新,但没有响应标题或文本,也没有状态或状态文本。
我采取了哪些措施进行调查 - 我已经查看了XMLHttpRequest的MDN文档,看看我是否做错了什么,但我的代码看起来还不错。 - 我已经用很多警告语句填充脚本来尝试调试它,但我只能找到症状,而不是原因。 - 我已经下载并安装了Fiddler以检查请求和响应:我可以确认请求是从IE8和Firefox发送的,并且(不仅如此)Web服务器正在向两个浏览器返回完全相同的响应 - 标题和身体。
所以问题是: 为什么这不起作用? Ajax不再是一项新技术,如果它在IE8(6岁)中运行正常,那么Firefox 31(1岁)肯定没问题。
这是我的服务器请求代码:
function getServerTime()
{
if (http)
{
var url;
var userAgent = window.navigator.userAgent
var msie = userAgent.indexOf("MSIE") >= 0;
var msieVerNum;
if (msie)
{
/* The string "MSIE" has been found so this script
* is running under Internet Explorer. */
//Remove the portion of the user agent string to the left of "MSIE ".
userAgent = userAgent.substring(userAgent.indexOf("MSIE "));
/* Remove "MSIE " from the user agent string thus leaving the
* version number at the start of the string. */
userAgent = userAgent.replace("MSIE ","");
msieVerNum = parseInt(userAgent);
if (msieVerNum <= 8)
{
/* This script is running under Internet Explorer 8 or older.
* Hence, using the Date.getTime() function.
*/
url = "http://localhost./telltimeXML.php?" + (new Date()).getTime();
}
}
if (! msie || msieVerNum >= 9)
{
if (Date.now)
{
url = "http://localhost./telltimeXML.php?" + Date.now();
}
}
if (typeof(url) != "undefined")
{
http.open("GET", url, true);
http.onreadystatechange = useHttpResponse;
//http.send(null);
http.send();
}
}
else
{
alert("no XMLHttpRequest object");
}
}
...这是我的事件处理程序:
function useHttpResponse()
{
if (http.readyState == 4)
{
if (http.status == 200)
{
document.getElementById("ShowTime").innerHTML =
http.responseXML.getElementsByTagName("timenow")[0].childNodes[0].nodeValue;
}
}
else
{
document.getElementById("ShowTime").innerHTML = "<img src=\"0002.gif\" />";
}
}