2013-09-24 226 views
1

我想從dojo xhrGet調用中獲取json對象。從dojo.xhrget返回json對象

我想要的是jsonobject =東西;

我可以看到控制檯中的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的console.log部分很好,正是我想要的。

回答

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

謝謝!我真的很陌生,這是我顯然沒有得到的東西。是否有可能從外部獲取json數據?做deferred.then ....也讓我獲得json數據,但是我仍然無法從函數外部獲得它,所以我沒有比以前更好。 – user1646040