1

我在使用 $.parseXML() 和更多版本的 IE8 时遇到问题。它在 IE8 和 chrome 以及 Firefox 中工作得非常好。请查看下面给出的代码。

查询:

        var result = data.d;
        var obj = decodeBase64(result);
        var xmlDoc = $.parseXML(obj);

XML 返回:

<?xml version="1.0"?>
<ArrayOfMultiLineItemJson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema
    MultiLineItemJson>
    <Order_Number>PAAAA00017</Order_Number>
    <Order_Item>01</Order_Item>
    <Order_Subitem>0001</Order_Subitem>
    <Order_Type>PO</Order_Type>
    </MultiLineItemJson>
    </ArrayOfMultiLineItemJson>

IE9 中的错误信息

Unhandled exception at line 490, column 3 in http://localhost:55005/resources/js/jquery-1.9.0.js

0x800a139e - Microsoft JScript runtime error: Invalid XML: 
<?xml version="1.0"?><ArrayOfMultiLineItemJson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><MultiLineItemJson><Order_Number>PAAAA00017</Order_Number><Order_Item>01</Order_Item></ArrayOfMultiLineItemJson>

提前致谢

4

2 回答 2

1

给出错误的代码可以追溯到jquery库代码

// Cross-browser xml parsing
parseXML: function( data ) {
    var xml, tmp;
    if ( !data || typeof data !== "string" ) {
        return null;
    }
    try {
        if ( window.DOMParser ) { // Standard
            tmp = new DOMParser();
            xml = tmp.parseFromString( data , "text/xml" );
        } else { // IE
            xml = new ActiveXObject( "Microsoft.XMLDOM" );
            xml.async = "false";
            xml.loadXML( data );
        }
    } catch( e ) {
        xml = undefined;
    }
    if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
        jQuery.error( "Invalid XML: " + data );
    }
    return xml;
},

后来的浏览器,即 9,10 返回 window.DOMParser 和 DOMParser(); object ,因此代码进入 non-ie part 。但是 ie 8 没有定义 DOMParser() ,因此它会引发错误。

修复将添加 ie8 特定测试以及 if ( window.DOMParser ) 让我知道这是否有帮助

于 2013-08-25T10:53:23.737 回答
0

必须将其放在答案中,因为它不适合评论。我无法在 Windows 机器上重现它。

js代码:

    $.get("test.txt", function (data) {
        console.log(data);
        //var obj = decodeBase64(result);
        var xmlDoc = $.parseXML(data);
        console.log(xmlDoc);
    });

xml:

<?xml version="1.0"?>
<ArrayOfMultiLineItemJson 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <MultiLineItemJson>
    <Order_Number>PAAAA00017</Order_Number>
    <Order_Item>01</Order_Item>
    <Order_Subitem>0001</Order_Subitem>
    <Order_Type>PO</Order_Type>
    </MultiLineItemJson>
    </ArrayOfMultiLineItemJson>

test.txt 的响应标头:Content-Type text/plain

当我重命名为test.txt内容test.xml类型时text/xml,我需要从中获取文档对象的所有代码是:

    $.get("test.xml", function (xmlDoc) {
        console.log(xmlDoc);
    });

当使用您发布的无效 XML 时,它在 FF 中也不起作用,因为我在那里遇到错误。

我没有使用decodeBase64,也许您应该在没有它的情况下进行测试,或者 console.log 它返回的文本(console.log(obj))。在 IE 中按 F12 打开开发者工具,控制台应该在 Script 选项卡下

于 2013-08-25T06:26:48.300 回答