Jquery XML Parse不适用于IE

时间:2013-04-02 09:17:14

标签: javascript jquery browser internet-explorer-9

我遇到了一个情况需要帮助。我正在尝试使用jquery ajax方法读取xml文件的内容,如下所示:

$.ajax({
type: "GET",
url: "Resources/languageResource.xml",
dataType: "xml",
success: function(xml) {
    $(xml).find(lang).each(function(){
        var title=$(this).find('title').text();
        var loginBoxHeader1=$(this).find('loginBoxHeader1').text();
        var loginBoxHeader2=$(this).find('loginBoxHeader2').text();
        var username=$(this).find('username').text();
        var password=$(this).find('password').text();
        var submit=$(this).find('LoginBtn').text();
        var RememberCheckbox=$(this).find('RememberCheckbox').text();

        document.getElementById('titleId').innerText = title;
        document.getElementById('h1Id').innerHTML = title;
        document.getElementById('loginBoxHeader1').innerHTML = loginBoxHeader1;
        document.getElementById('loginBoxHeader2').innerHTML = loginBoxHeader2;
        document.getElementById('username').innerHTML = username;
        document.getElementById('password').innerHTML = password;
        document.getElementById('submit').innerHTML = submit;
        document.getElementById('RememberCheckbox').innerHTML = RememberCheckbox;
    });
}

});

这适用于Firefox和Chrome,但不适用于IE。缺少什么?

Internet Explorer版本为9。

这是xml文件结构:

<xml>
<English>
    <title>Welcome to ******* System</title>
    <loginBoxHeader1>Login Panel - </loginBoxHeader1>
    <loginBoxHeader2>Please provide following credentials!</loginBoxHeader2>
    <username>Username:</username>
    <password>Password:</password>
    <LoginBtn>Log in</LoginBtn>
    <RememberCheckbox>Remember my login on this computer</RememberCheckbox>
</English>

<Spanish>
    <title>********************************</title>
    <loginBoxHeader1>Login Panel -</loginBoxHeader1>
    <loginBoxHeader2>Por favor, proporcione las credenciales siguientes!</loginBoxHeader2>
    <username>Nombre de Usuario:</username>
    <password>Contraseña:</password>
    <LoginBtn>iniciar la sesión</LoginBtn>
    <RememberCheckbox>Recordar mi usuario en este equipo</RememberCheckbox>
</Spanish>

</xml>

Chrome / Firefox上的结果:

enter image description here

IE上的结果:

enter image description here

2 个答案:

答案 0 :(得分:0)

它之所以不起作用,是因为在旧版本的jQuery中,XMLHttpRequest的字段responseXML被评估为XML响应。较新的版本似乎总是使用DOMParser来解析原始响应,即使在XMLHttpRequest的responseXML字段中存在vaild dom树时,它也会在响应的过程中引发异常。由于字符编码问题,可能会抛出异常,但是如果responseXML包含dom树,则可以解决此问题:

var xhr;

$.ajax({
   type: "GET",
   url: "Resources/languageResource.xml",
   dataType: "xml",
   xhr: function () {
      xhr = $.ajaxSettings.xhr();
      return xhr;
   },
   success: onSuccess,
   error: function(status, msg) {
      if (status.status == 200) {
         var xml = xhr.responseXML;
         if (xml && xml.documentElement) {
            onSuccess(xml);
         }
      } else {
          // error handling
      }
   }
 });

 function onSuccess(xml) {
    // parsed xml tree
    // ...
 }

然而,奇怪的是,responseXML包含一个dom树,而DOMParser无法解析原始响应。这个问题似乎是用IE10修复的 - 是IE9使用两个不同的xml解析器(resonseXML!= DOMParser)? - 奇怪......

答案 1 :(得分:0)

在这种情况下,帮我重置了所有设置IE (Internet Options -> Advanced -> Reset)