23

HI all,
I use jQuery to parse my xml responses.

I have this xml :

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

And i want to get "client_id" value.

4 Answers 4

39

To fix the expected response data type to XML right in your request, set the dataType parameter to "xml". If you don't, jQuery uses the response headers to make a guess.

It is supported on the $.ajax() function as part of the options object, as well as on $.get() and $.post():

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

So you could do this:

$.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 that as of jQuery 1.5 you can use a nicer version of the above Ajax request:

$.get("foo.aspx", {
  key: "value"
})
.done(function (xml){
  var clientid = $(xml).find('client_id').first().text();
  alert(clientid);
});
Sign up to request clarification or add additional context in comments.

2 Comments

Is this secure? You parse response content by jQuery and you're not sure about if it's correct or not.
@Artem If the response Content-Type: header type says text/xml, then jQuery will treat the response data as XML. If it says application/json, jQuery will treat the response as JSON. This works very well. I'm not sure what you mean by "secure".
38

First, make a request for the XML with $.get or however you want. Then:

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

1 Comment

Smart! XML is a tag language.. yup!
2

Use something like this:

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

Comments

2

just to complement, i you use $.get:

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

function doSomethingWithData(data) {

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


        var marker = $(this);


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

 });

here tpicall used request.responseXML is the data in this case, and you have to encapsulate it in $(data) in order to work (this make me break the head about 3 hours ;S)

                     //    alert(markerh);

                }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.