【问题标题】:new XMLHttpRequest cannot run on Firefox新的 XMLHttpRequest 无法在 Firefox 上运行
【发布时间】:2011-04-25 20:08:30
【问题描述】:

下面的脚本在 IE 中完美地工作,用于 XML 响应。但似乎我无法弄清楚如何在 Firefox 或 Chorme 上运行。尝试一些修改,但仍然无法运行它。急需助手。

<script type="text/javascript" language="javascript"> 
var xmlhttp;
var timeStamp;

var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate() //remove the + 1  afterwards
var year = currentTime.getFullYear()
var hour = currentTime.getHours()
var minutes = currentTime.getMinutes()
var second = currentTime.getSeconds() + 1


timeStamp = day + "/" + month + "/" + year + " " + hour + ":" + minutes + ":" + second;



function on_click()

{



    var xmlToSend = "<?xml version='1.0' encoding='utf-8'?>";
    xmlToSend += "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' ";
    xmlToSend += "xmlns:xsd='http://www.w3.org/2001/XMLSchema' ";
    xmlToSend += "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>";
    xmlToSend += "<soap:Body><Welcomescreen Sender='SENDERDDRESS' TimeStamp='28/10/2009 16:49:31' Type='1' Workshop='SG' RequireAppointmentDate='2010/01/04' xmlns='http://www.SENDERDDRESS.com/integration'/>";
    xmlToSend += "</soap:Body></soap:Envelope>";

    /


    var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); 
    xmldoc.loadXML(xmlToSend); 


    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 = state_Change;

xmlhttp.open("POST", "http://SENDERDDRESS:4509/resd", false);
xmlhttp.setRequestHeader("SOAPAction", "http://www.mhe.com/SRP/requestVinRequest");
xmlhttp.setRequestHeader("Content-Type", "text/xml");
xmlhttp.setRequestHeader("User-Agent", "Jakarta Commons-HttpClient/3.0.1");
xmlhttp.setRequestHeader("Host", "SENDERDDRESS:4509");
xmlhttp.setRequestHeader("Content-Length", "391");
xmlhttp.send(xmldoc);



var objResponse = document.getElementsByTagName("Appointment");

objResponse.innerText = xmlhttp.responseXML.xml;

}

function state_Change()

{
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
            txt = "<table align='right' border='1' width='400'><tr><th><font color='#d9d7d7' size='4' face='verdana'>Time</font></th><th><font color='#d9d7d7' size='4' face='verdana'>Plate No.</font></th><th><font color='#d9d7d7' size='4' face='verdana'>Status</font></th></tr>";
            x = xmlhttp.responseXML.documentElement.getElementsByTagName("Appointment");
            for (i = 0; i < x.length; i++) {

                xx = x[i].getElementsByTagName("AppointmentTime"); {
                    try {
                        txt = txt + "<td><font size = 5>" + xx[0].firstChild.nodeValue + "</font></td>";
                    } catch (er) {
                        txt = txt + "<td> </td>";
                    }
                }

                xx = x[i].getElementsByTagName("NumberPlate"); {
                    try {
                        txt = txt + "<td><font size = 5>" + xx[0].firstChild.nodeValue + "</font></td>";
                    } catch (er) {
                        txt = txt + "<td> </td>";
                    }
                }

                xx = x[i].getElementsByTagName("statusCode"); {
                    try {
                        txt = txt + "<td><font size = 5>" + xx[0].firstChild.nodeValue + "</font></td>";
                    } catch (er) {
                        txt = txt + "<td> </td>";
                    }
                }
                txt = txt + "</tr>";
            }
            txt = txt + "</table>";
            document.getElementById('txtCDInfo').innerHTML = txt;
        } else

        {


        }

    }

}
</script> 

【问题讨论】:

  • 定义“不起作用”。有任何错误消息吗?

标签: javascript html xml ajax


【解决方案1】:

我看到两个问题。一个是你在xmlToSend +=这一系列行之后有一个杂散的/,这是一个语法错误,然后是这样的:

var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); 

ActiveXObject 不是标准的,它是 IE 特有的东西。与您使用它的其他地方不同,该行不是有条件的。

您可以将xmlToSend 字符串直接传递给XMLHttpRequest#send (link),您无需先将其制作成XML 文档。它只需要再次变成一个字符串才能发送。

如果您真的想要实际创建一个 XML 文档对象,您可以在兼容的浏览器上使用 DOMImplementation#createDocument(例如,document.implementation.createDocument)。

题外话:JavaScript 库可以让您在 Ajax 领域(以及许多其他领域)的生活更轻松一些。 jQueryClosurePrototypeYUIany of several others 之类的内容可能会为您节省一些时间。

【讨论】:

  • T.J,我已经移出了特定的 IE ActiveXObject 并且仅使用 XMLHttpRequest 传递并在 IE 中工作,但仍然不在 FF 中。但是,我对两个浏览器输出都进行了 TCP 跟踪,发现 FF 输出中的 XML 标头方案不同,服务器响应错误。
  • 输出发送 IE: POST /domain HTTP/1.1 Accept: / Accept-Language: en-us Referer: localhost/appointment/welcome.htmlsoapaction: domain.com/SRP/requestVinRequest Content-Type: text /xml User-Agent: Jakarta Commons-HttpClient/3.0.1 Accept-Encoding: gzip, deflate Host: localhost:8080 Content-Length: 415 Connection: Keep-Alive Cache-Control: no-cache
  • 输出发送 FF:OPTIONS /domain HTTP/1.1 主机: localhost:8080 用户代理: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.10) Gecko /20100914 AskTbARS/3.8.0.12304 Firefox/3.6.10 (.NET CLR 3.5.30729) 接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q =0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115连接:keep-alive 来源:localhost Access-Control-Request-Method:POST Access-Control-Request-Headers:soapaction,user-agent
  • @Arif: “我已经移出了特定的 IE ActiveXObject 并且只使用了 XMLHttpRequest” 我说的是你在哪里创建 Microsoft.XMLDOM 对象,而不是XMLHttpRequest 对象。同样,调用ActiveXObject 来创建XMLDOM 的代码不是 有条件的(在创建XMLHttpRequest 时查看分支的上方)。
猜你喜欢
  • 2011-11-24
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2017-03-28
相关资源
最近更新 更多