如何使用jquery Ajax函数在IE浏览器中读取xml数据

时间:2013-06-11 02:48:05

标签: jquery xml ajax

我需要在AJAX函数中使用jquery读取xml数据,这在firefox中工作正常...但是我被IE浏览器困住了...我无法读取xml。程序需要从xml文件中读取“proptype”。我已经发出警报提示(theXml),但是我没有在IE中给出答案但是它在firefox浏览器中工作

这是我的代码..

<!DOCTYPE html>
<html>
<head>
<title></title>

 <script src="../scripts/jquery-1.9.1.min.js"></script>
 <script src="../scripts/jquery-migrate-1.2.1.min.js"></script>

 <script>

    $(document).ready(function () {

        testXml();

    });


    function testXml() {

        $.ajax({
            type: 'GET',
            url: 'XML_estatesIT_op4.xml',
            dataType: ($.browser.msie) ? "text" : "xml",
            success: function (xml) {

                theXml = parseXml(xml);

                alert(theXml);

                $(theXml).find("property").each(function () {

                    var b1 = $(this).find('proptype').text();

                    alert(b1);                        
                });
            },
            error: function () {
                alert("An error occurred while processing XML file.");
            }
         });
    }

   function parseXml(xml) {

        if (jQuery.browser.msie) {
            var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.loadXML(xml);
            xml = xmlDoc;
        }

        return xml;
    }

   </script>
 </head>
 <body>

 </body>
</html>

===== XML =====

<properties>
   <property>
  <propcode>DEMO1_000001</propcode>
  <address6>Cambridgeshire</address6>
  <postcode>PE28 2BG</postcode>
  <ccode>UK</ccode>
  <priceask>360,000</priceask>
  </property>
</properties>

4 个答案:

答案 0 :(得分:1)

 function parseXML(xml) {
    if (jQuery.browser.msie) {
        alert("dd3");
        var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.loadXML(xml);
        xml = xmlDoc;
    }
    alert("dd4");
    return xml;
}

function searchThis() {
    alert("dd1");
    $.ajax({
        type: "GET",
        url: XMLSource,
        dataType: ($.browser.msie) ? "text" : "xml",
        success: function (xml) {
            alert("dd2");
            var newXML = parseXML(xml);
            loadPublication(newXML)
        }
    });
}

喜欢这个为IE工作。

答案 1 :(得分:1)

您无需重复xml文件名,并在parseXML中再次执行相同的操作。

这里的技巧是禁用缓存。但IE仍然有时不会禁用缓存。因此,将时间戳作为查询字符串与url中的xml文件名一起添加,以解决问题。我测试了它并在IE和其他浏览器上100%工作。

$.ajax({
  type: 'GET',
  url: "XML_file.xml?timestamp=" + new Date().getTime(),   // add the timestamp to the url to avoid caching in IE
  dataType: ($.browser.msie) ? "text" : "xml",
  cache: "false",
  success: function (xml) {

     var processedXML = parseXml(xml);

     $(processedXML).find('my record').each(function () {  //code  } 
  }
});

function parseXml(xml) {
   if (jQuery.browser.msie) {    // Only for IE
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async="false";
      xmlDoc.loadXML(xml);
      xml = xmlDoc;
   }
   return xml;
}

答案 2 :(得分:0)

我通过将chrome.exe --allow-file-access-from-files添加到其属性目标位置而不是获取IE来管理chrome的问题。那么任何人都可以发布你的答案。

答案 3 :(得分:0)

最后我找到了解决方案,诀窍是为版本低于10的IE浏览器使用单独的代码XML。

因此,每次调用Ajax时,都会使用输入参数XML Dom或文本调用parseXml,具体取决于浏览器....如果当前浏览器是IE,则上传XML文档,根据Microsoft标准处理它并返回XML Ajax中的其余进程按预期进行!!

注意:jQuery 1.9不支持browser.msie,但您可以添加jquery-migrate-1.2.1.min.js以使其兼容或使用userAgent并查找哪个是当前浏览器

$.ajax({
  type: 'GET',
  url: 'XML_file.xml',
  dataType: ($.browser.msie) ? "text" : "xml",
  success: function (xml) {

     var processedXML = parseXml(xml);

     $(processedXML).find('my record').each(function () {  //code  } 
  });


 function parseXml(xml) {

  if ($.browser.msie)  {

    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
   }
   else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
   }

    xmlhttp.open("GET", "XML_file.xml", false);
    xmlhttp.send();
    xmlDoc = xmlhttp.responseXML;

    xml = xmlDoc;
  }
        return xml;
}