2013-09-24 3 views
1

Я пытаюсь получить объект json из вызова dojo xhrGet.Возврат json объекта из dojo.xhrget

Что я хочу, это jsonobject = stuff;

Я вижу объект json в консоли, но не могу получить к нему доступ!

 


    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)); 


Консольная часть, которая показывает json_results, в порядке, именно то, что я хочу.

ответ

3

Методы dojo.xhrXXX являются асинхронными. Это означает, что линии, следующие за

var deferred = dojo.xhrGet(xhrargs); 

Продолжает выполнение во время обработки вызова внешней конечной точки. Это означает, что вы должны использовать обещание API сказать определенный блок кода, чтобы выполнить один раз запрос XHR завершения:

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); 
}); 

Из-за асинхронной природы запроса, для большинства намерений и целей, которые ценят Безразлично» t существует за пределами функции обратного вызова. Один из способов структурирования вашего кода вокруг этого - в нескольких блоках. например:

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(); 

Вы все еще можете получить доступ к переменным вне области видимости функции (например, если store были определены глобально).

+0

Спасибо! Я действительно новичок в javascript, и это то, чего я, очевидно, не получаю. Можно ли получить данные json извне? Выполнение отложенных. Затем ... также получает данные json, но я все еще не могу получить его из-за пределов функции, поэтому мне не лучше, чем раньше. – user1646040

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