XML无法在IE8中解析

时间:2012-12-09 22:27:58

标签: jquery xml internet-explorer-8

编辑:感谢charlietfl我意识到IE< 9将所有XML标记转换为大写。但是,凭借这些知识,我无法找到一个解决方案来让IE在IE8中正确显示。

我在所有好的浏览器IE10和9中都有这个功能,但是在IE8中没有解析/显示的xml数据。

$("#Form").validate({
    submitHandler: function(form) {
        $('#prcs3').show();
        var dataString = $(form).serialize();
        $.ajax({
            type: $(form).attr('method'),
            url: form.action,
            data: dataString,
            clearForm: true,
            success: function(data) {
                $('#resultGenerate > li').remove();
                var answer = $(data).find("td:eq(3)").text();
                var message = $(data).find("td:eq(5)").html();
                var $xml = $( message );
                if (answer==="True") {
                    $('#prcs3').hide();
                    $xml.find('license').each(function(){
                        var CustomerID = $(this).find('CustomerID').text();
                        var License  = $(this).find('License').text();
                        var Log  = $(this).find('Log').text();
                        var ExpirationDate  = $(this).find('ExpirationDate').text();
                        $("#resultGenerate").show().removeClass('error').append($('<li><span class="ID">' + CustomerID + '</span><span class="L">' + License + '</span><span class="Log">' + Log + '</span><span class="Exp">' + ExpirationDate + '</span></li>'));
                    });
                } else {
                    $('#prcs3').hide();
                    $('#resultGenerate').show().html('<a class="close">X</a><ul><li>' + message + '</li></ul>');
                }
            }
        });
        return false;
    }
});

什么可能导致IE8不显示我返回/解析的xml?我感谢任何建议,一如既往地谢谢你。

4 个答案:

答案 0 :(得分:3)

如果没有看到返回的响应的示例,我收集的是xml是要返回的html表中的文本。

您可能需要使用$.parseXML()

尝试:

var $xml = $( $.parseXML( message) );

API参考:http://api.jquery.com/jQuery.parseXML/

编辑:此外,低于9的IE版本会将标记翻译为全部大写。您可以通过检查length

来解决这个问题
if( $xml.find('LICENCES').length ){
    /* use all uppercase tagnames*/
}else{
    /* use all lowercase tagnames*/
}

答案 1 :(得分:0)

我认为问题出在var $xml = $( message );,因为我通过JSlint运行它,这是唯一的非jQuery相关错误。 var $xml = $(message);会修复它吗?

编辑:尝试删除$之前的$(form).serialize();,因为jQuery网站(http://docs.jquery.com/Plugins/Validation)有一个示例,表明可能会出现问题。

答案 2 :(得分:0)

我使用IE10并遇到了同样的问题。链接here向我描述了这个问题。所以,简而言之,首先我检查了浏览器是否是IE(因为xml被其他浏览器成功解析)然后转换了我的响应字符串。希望以下代码片段有所帮助:

function getXMLData(str)
{
    var MSIE = jQuery.support.leadingWhitespace;//detects if browser is IE 
     if(MSIE)if browser is IE 
     {
      if ( ! $.isXMLDoc(str))//if str is not in XML, make it xml
       str = $.parseXML(str)
      var xmlDoc=str;
     }
     else//for other browsers, take the response string as it is
     {
      var html = XMLToString(str);//gives back string from xml string
      var xml = html;
      var xmlDoc = $.parseXML( xml );
     }

     var $xml =$( xmlDoc ),
     $title = $xml.find( "string" );//find the 'string' element from xml
     //do the rest of the processing
}

答案 3 :(得分:0)

我在这里猜测:

    success: function(data) {
        $('#resultGenerate > li').remove();
        var answer = $(data).find("td:eq(3)").text();
        var message = $(data).find("td:eq(5)").html();
        var $xml = $( message );

我认为你必须首先获得parseXML数据。所以,

    success: function(data) {
        $('#resultGenerate > li').remove();
        var $data = $( $.parseXML(data) );
        var answer = $data.find("td:eq(3)").text();
        var message = $data.find("td:eq(5)").html();
        var $xml = $( message );