2010-11-30 1 views
3

, когда я действительно предупрежу его возвращение строки, как это:возвращение XML строка - как разобрать файл XML с помощью JQuery/JSON

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>" 

Update: я попытался использовать этот метод 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> 
+0

Что вы пытаетесь выбраться? Кроме того, это * определенно * не JSON :) – 2010-11-30 22:10:21

+0

Ник: мой url вызывает вызов перекрестного домена, и поэтому я использую метод getJSON, и я обновил свой вопрос, пожалуйста, взгляните на него. – 2010-12-01 01:19:10

ответ

1

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

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

Один из возможных способов обойти это ваши данные о возврате - это что-то вроде «jsonp1 ({« data »:« <xml> «})». Если это так, то в вашем примере переменная «данные» представляет собой простой текст, и вам нужно будет проанализировать 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(...); 
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' 
}); 
+0

Я использую jsonp и его ссылку на перекрестный домен, и именно поэтому я использую getJson, я пытаюсь выполнить код и, но он не предупреждает меня, не дает мне никакой ошибки .... – 2010-12-01 00:47:59

+0

, когда я делаю `alert ($ (data) .find ('Document: first Name'). text()); `i dont получить какое-либо значение, его пустое – 2010-12-01 00:51:36

0

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

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

Если вы все еще ищете ответ, AJAX API Google, имеет встроенный XML-> JSon преобразователя.

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

Если Youre пытается использовать 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

 Смежные вопросы

  • Нет связанных вопросов^_^