user1646040
user1646040

Reputation: 121

Return json object from dojo.xhrget

I am trying to get the json object from a dojo xhrGet call.

What I want is jsonobject = stuff;

I can see the json object in the console, but cannot access it!



   var xhrargs = {
    url: "/rest/url",
    handleAs: "json",
    preventCache : false,
    load: function(json_results){
      console.log(json_results);
      store = json_results;
      return dojo.toJson.json_results;
    },
    error: function(response, ioArgs) {
      console.error(response);
      console.error(response.stack);
    }   
   };

    var deferred = dojo.xhrGet(xhrargs);
    console.log("Json is "+JSON.stringify(deferred));


The console.log part that shows the json_results is fine, exactly what I want.

Upvotes: 1

Views: 3239

Answers (2)

narendra singh
narendra singh

Reputation: 229

try this

    var xhrArgs = {
              url:"MethodName.action?Id="+id,
              handleAs: "json",
              load: function(Data){               
                var values = Data;  
                var count = Object.keys(values).length // gives u all keys count in a json object. In mine it is 0,1,2,3

                for (var i =0; i<count; i++){
                    var temp = values[i]; // values['name']
                  // do somthing ..
                    }
                }                   
              },
              error: function(error){       
                      alert(error);
              }                   
    }
    dojo.xhrPost(xhrArgs);

Upvotes: 0

BuffaloBuffalo
BuffaloBuffalo

Reputation: 7852

The dojo.xhrXXX methods are asynchronous. This means that the lines following

var deferred = dojo.xhrGet(xhrargs);

Will continue to execute while the call to an external endpoint is processing. This means you need to use the promise API to tell a certain block of code to execute once the XHR request is complete:

var deferred = dojo.xhrGet(xhrargs);
deferred.then(function(result){
    //this function executes when the deferred is resolved (complete)
    console.log('result of xhr is ',result);
});

Due to the asynchronous nature of the request, for most intents and purposes that value doesn't exist outside the scope of the callback function. One way to structure your code around this is in multiple blocks. for example:

var xhrLoaded = function(results){
    console.log('results = ',results);
    store = results;
}

var  performXhr = function(){
    var xhrargs = {
        url: "/rest/url",
        handleAs: "json",
        preventCache : false,
        error: function(response, ioArgs) {
          console.error(response);
          console.error(response.stack);
        }   
    };
    var deferred = dojo.xhrGet(xhrargs);
    deferred.then(xhrLoaded);
}

performXhr();

You can still access variables outside of the scope of the function (for example if store were defined globally).

Upvotes: 3

Related Questions