Возвращение XML-строки - PullRequest
       6

Возвращение XML-строки

3 голосов
/ 01 декабря 2010

когда я предупреждаю, это возвращает строку, подобную этой:

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()

            });

        });

Как прочитать XML-файл в jquery, ниже приводится то, что возвращает меня в виде строки, и я вижу это, когда я делаю оповещение (данные);

 $.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 ]

5 голосов
/ 06 мая 2013

Если вы все еще ищете ответ, в ajax API от Google есть встроенный конвертер xml-> json.

Вы можете позвонить через http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q= с URL вашего запроса в конце.

Если вы пытаетесь использовать 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 в качестве атрибутов. Если вам нужно направление в этом, проверьте Сериализация в JSON в jQuery

1 голос
/ 01 декабря 2010

Вы, похоже, неправильно поняли, что такое JSON и как он используется в jQuery!?

Если вы хотите сделать кросс-домен, возвращаемые данные должны быть в формате JSON. jQuery попытается проанализировать ваш JSON, как только он его получит. Он ожидает его в формате, подобном «jsonp1291171891383 ({})», который затем оценивается как JavaScript. XML, который вы вернули в не JavaScript.

Один из возможных способов обойти это - ваши возвращаемые данные - что-то вроде "jsonp1 ({" data ":" "})". Если это так, то в вашем примере переменная «data» представляет собой простой текст, и вам нужно будет проанализировать XML, прежде чем вы сможете получить к нему доступ с помощью методов селектора.

С здесь .

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( ... );
0 голосов
/ 01 декабря 2010

Другие говорят, что вы не должны использовать JSON, и они верны, но я думаю, что вам действительно нужно знать, что XML можно перемещаться так же, как HTML, используя jQuery.Вы можете использовать селекторы типа $('Name'), чтобы получить данные <Name> и т. Д.Поэтому, как только вы вернете data, вы можете сделать что-то вроде этого:

var people = data.children('Name');
0 голосов
/ 01 декабря 2010

Вы не должны использовать .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'
});
...