0

编辑:感谢 charlietfl,我意识到 IE < 9 将所有 XML 标记转换为大写。然而,即使有了这些知识,我也无法找到让 XML 在 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

4 回答 4

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*/
}
于 2012-12-09T22:42:22.220 回答
0

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

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

于 2012-12-09T22:39:07.287 回答
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 );
于 2014-03-04T00:58:13.717 回答
0

我使用的是 IE10 并且遇到了同样的问题。这里的链接描述了我的问题。因此,简而言之,首先我检查了浏览器是否为 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
}
于 2013-10-23T07:07:43.823 回答