服务器响应后,XMLHttpRequest对象为空 - 我做错了什么?

时间:2015-04-11 20:56:10

标签: ajax firefox xmlhttprequest

这是我关于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\" />";
    }
  }

0 个答案:

没有答案