2009-02-04 15 views
20

HI all,
Używam jQuery do parsowania moich odpowiedzi xml.parsować xml odpowiedź z jQuery

Mam ten xml:

<?xml version="1.0" encoding="UTF-8"?> 
<response status="ok"> 
    <client_id>185</client_id> 
</response> 

i chcę, aby uzyskać wartość "CLIENT_ID".

Odpowiedz

35

Najpierw zgłoś prośbę o XML za pomocą $ .get lub jak chcesz. Następnie:

clientID = $(myXML).find("client_id").text(); 
+0

Smart! XML to język tagów .. tak! –

37

Aby rozwiązać oczekiwaną odpowiedzią na typ danych XML w prawo w swoim wniosku, należy ustawić parametr dataType na „xml”. Jeśli nie, jQuery używa nagłówków odpowiedzi do odgadnięcia.

jest obsługiwana w funkcji $.ajax() jako część obiektu options, jak również na $.get() i $.post():

jQuery.ajax(options) 
jQuery.get(url, data, callback, type) 
jQuery.post(url, data, callback, type) 

Więc można to zrobić:

$.ajax({ 
    type: 'GET', 
    url: "foo.aspx", 
    data: { 
    key: "value" 
    }, 
    dataType: "xml", 
    success: function (xml){ 
    var clientid = $(xml).find('client_id').first().text(); 
    alert(clientid); 
    } 
}); 

Note że od wersji jQuery 1.5 można użyć ładniejszej wersji powyższego żądania Ajax:

$.get("foo.aspx", { 
    key: "value" 
}) 
.done(function (xml){ 
    var clientid = $(xml).find('client_id').first().text(); 
    alert(clientid); 
}); 
+0

Czy to jest bezpieczne? Analizujesz zawartość odpowiedzi przez jQuery i nie wiesz, czy jest poprawna czy nie. –

+0

@Artem Jeśli typ nagłówka "Content-Type:" mówi "text/xml", wówczas jQuery potraktuje dane odpowiedzi jako XML. Jeśli mówi 'application/json', jQuery potraktuje odpowiedź jako JSON. Działa to bardzo dobrze. Nie jestem pewien, co masz na myśli przez "bezpieczny". – Tomalak

2

użyć czegoś takiego:

$.ajax({ type: 'GET', url: 'test.xml', dataType: 'xml', success: function(xml){ 
      $('response', xml).each(function() {alert($(this).find('client_id').text());});   
      }}); 
2

tylko uzupełniać, i użyć $ .get:

$.get($('file.xml').val(),{ } , doSomethingWithData); 

funkcja doSomethingWithData (data) {

$(data).find("marker").each(function() { 


     var marker = $(this); 


    alert(marker.attr("lat")); 

}); 

tutaj tpicall użył request.responseXML to dane w tym przypadku i musisz je enkapsulować w $ (dane), aby działać (to sprawi, że złamie mi głowę około 3 godzin, S)

     // alert(markerh); 

       }