Search code examples
ajaxfeedparser

parsing a reponse from a XMLHttpRequest


I'm struggling with how to parse a response from an XMLHttpRequest. The response is in json format:

http://flickr.com/services/rest/?method=flickr.photos.search&api_key=75564008a468bf8a284dc94bbd176dd8&tags=paris&format=json

to make sure it does indeed come in as such i tested it:

document.getElementById('info').innerHTML = this.responseText

which returns me a page with a long line of data written in json format. Could someone help me figure out the next steps in order to extract data from the response i.e. a list of all titles

i did some research and came across this:

response = this.responseText ;
var doc = new DOMParser().parseFromString(response, "text/xml");

what do i need to do next? (Note: i wish to do this manually i.e. without the help of jQuery or similar tools.)

[EDIT]

based on the suggestions below and on the Flickr page on that matter, i have tried the following:

request.onreadystatechange = function()
{
 ...
            if (this.responseXML != null)
            {
                jsonFlickrApi(this.responseText) ;

                function jsonFlickrApi(rsp){

                    for (var i=0; i<rsp.photos.photo.length; i++){

                        var blog = rsp.photos.photo[i];

                        var div = document.createElement('div');
                        var txt = document.createTextNode(photo.owner);

                        div.appendChild(txt);
                        //document.body.appendChild(div);
                        document.getElementById('info').innerHTML.appendChild(div);
                    }
...
}

this doesn't return anything visible yet.

[EDIT2]

further troubleshooting reveals:

rsp = this.responseText ;
document.getElementById('info').innerHTML = rsp.stat ;

prints undefined


Solution

  • The cool thing about JSON is that it's actually executable code. You don't need to do any "manual" parsing – just run the code. Perhaps Flickr supplies a function called jsonFlickrApi with their API libs that they exepct you to use, but you could just as well supply your own.

    function parseFlickrJson(jsonstring){
        var data=null;
    
        var jsonFlickrApi=function(d){
            data = d;
        }
    
        eval(jsonstring);
    
        return data;
    }
    
    myreturndata = parseFlickrJson(response);
    
    // Try getting something from the object
    alert(myreturndata.photos.pages);