1

我需要在 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

4 回答 4

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 工作的乐趣。

于 2013-06-12T06:58:55.967 回答
1

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

这里的技巧是禁用缓存。但是 IE 有时仍然不会禁用缓存。因此,将时间戳作为查询字符串与您的 xml 文件名一起添加到解决问题的 url 中。我对其进行了测试,并在 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;
}
于 2014-04-17T12:36:40.693 回答
0

我通过将 chrome.exe --allow-file-access-from-files 添加到其属性目标位置但没有获取 IE 来管理 chrome 的问题。请任何人都可以发布您的答案。

于 2013-06-12T05:50:01.090 回答
0

finally I have found the solution, the trick is use separate code XML for IE browsers that are version of less than 10 .

so every time Ajax is call a method parseXml is called with input parameter XML Dom or text, depending on browser .... and if current browser is IE, it upload XML doc, process it according to Microsoft standards and return XML and rest of processes in Ajax carries on as expected!!

note : browser.msie is not supported in jQuery 1.9 but you can add jquery-migrate-1.2.1.min.js in order to make it compatible or use userAgent and find which is current browser

$.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;
}
于 2013-06-15T14:53:56.870 回答