返回xml字符串 - 如何使用JQuery / Json解析xml文件

时间:2010-11-30 22:07:23

标签: jquery json jsonp

当我确实警告它返回这样的字符串时:

data    "<?xml version="1.0" encoding="utf-8" ?> 
      <xml xmlns="http://www.opengis.net/kml/2.2">
      <Document>
      <Name>John Smith</Name> 
      <Description>stackoverflow</Description> 
      <Total>50</Total> 
      </Document>
      </xml>"

更新 我尝试使用此方法getJSON,我确实收到警报但从未在find('Document').each.....

内执行
 $.getJSON(_url, function (data) {

            alert(data);    
            $(data).find('Document').each(function () {
                debugger
                var name = $(this).find('Name');
                var desc = $(this).find('Description').text();
                var total = $(this).find('Total').text()

            });

        });

如何在jquery中读取xml文件,下面是将我作为字符串返回的内容,我可以看到当我做警报(数据)时;

 $.getJSON(url, {},
                function (data) {
                    alert(data);
             }
});


<?xml version="1.0" encoding="utf-8" ?> 
- <xml xmlns="http://www.opengis.net/kml/2.2">
- <Document>
  <Name>John Smith</Name> 
  <Description>stackoverflow</Description> 
  <Total>50</Total> 
  </Document>
  </xml>

4 个答案:

答案 0 :(得分:5)

如果您仍在寻找答案,Google的ajax API会内置xml-&gt; json转换器。

您可以通过http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=致电 随你的请求网址。

如果您尝试使用JSONP并解决相同的原因问题,它将看起来像这样:

var googleAPI = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=";

$.getJSON(googleAPI + url + "&callback=?", null, function(data) {

        alert(data);    
        $(data).find('Document').each(function () {
            debugger
            var name = $(this).find('Name');
            var desc = $(this).find('Description').text();
            var total = $(this).find('Total').text()

        });
});

但是,这将为您提供JSON数据,因此您需要修改回调以对其进行序列化,并将Name,Description,Total元素作为属性进行访问。如果您需要这方面的指示,请结帐Serializing to JSON in jQuery

答案 1 :(得分:1)

您似乎误解了JSON是什么,以及如何在jQuery中使用它??

如果要进行跨域,则返回的数据必须为JSON格式。 jQuery会在收到JSON后立即尝试解析它。它期望它的格式为“jsonp1291171891383({})”,然后将其评估为JavaScript。您在非JavaScript中返回的XML。

解决此问题的一种可能方法是返回数据类似于“jsonp1({”data“:”&lt; xml&gt;“})”。如果是这种情况,那么在您的示例中,变量“data”是纯文本,您需要先解析XML,然后才能通过选择器方法访问它。

来自here

jQuery.fromXMLString = function(strXML){
    if (window.DOMParser) {
        return jQuery(new DOMParser().parseFromString(strXML, "text/xml"));
    } else if (window.ActiveXObject) {
        var doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(strXML);
        return jQuery(doc);
    } else {
        return jQuery(strXML);
    }
};

然后在你的代码中:

 $.fromXMLString(data).find('Document').each( ... );

答案 2 :(得分:0)

您不应该将.getJSON用于XML数据。相反,试试这个:

$.ajax({
    url: url,
    data: {},
    success: function(data){
        // now you can traverse your data just like the DOM
        // e.g. 
        // alert( $(data).find('Document:first Name').text() );
    },
    dataType: 'xml'
});

答案 3 :(得分:0)

其他人说你不应该使用JSON,它们是正确的,但我认为你真正需要知道的是XML可以像使用jQuery的HTML一样导航。您可以使用$('Name')等选择器来获取<Name>数据,依此类推。因此,一旦您返回data,就可以执行以下操作:

var people = data.children('Name');