2013-02-14 23 views
1

我有這樣的代碼同樣,如何從回調中獲取數據?

var children; 
$.ajax({ 
    url: Routing.generate('snmp_ajax_get_children', {dev: root}), 
    async: true, type: "GET" 
}).done(function(data) { 
    var children = Array(); 
    for(var i in data) { 
     children[i] = data[i].split('|'); 
     for (var j in data[i]) { 
      children[i][j] = $.trim(data[i][j]); 
     } 
    } 
    localStorage.setItem('children', children); 
}); 
children = localStorage.getItem(children); 
localStorage.removeItem('children'); 

我使用localStorage的(醜陋的,我知道)擺脫回調的數據,因爲任何其他的辦法並沒有對我的工作(我不知道爲什麼),任何建議?

回答

3

由於您使用了異步ajax,因此您無法請求響應的結果,直到完成完成爲止。要做到這一點,你可以這樣做:

// receiving data 
function getData(callback) { 
    $.ajax({ 
     url: Routing.generate('snmp_ajax_get_children', {dev: root}), 
     async: true, type: "GET" 
    }).done(function(data) { 
     // is async, so it takes some time until this is triggered... 
     // I don't know your response but I think children should be 
     // an object: 
     // var children = {}; 
     var children = Array(); 
     for(var i in data) { 
      children[i] = data[i].split('|'); 
      for (var j in data[i]) { 
       children[i][j] = $.trim(data[i][j]); 
      } 
     } 
     // calling your data handler with the data 
     callback(children); 
    }); 
} 

// your data handler 
function handleData(data) { 
    // do whatever 

} 


// call the action, setting the callback 
getData (handleData); 
+0

將默認值設置爲回調「callback = callback || null」,並在調用它之前測試回調== null,然後回調爲optionnal。 – sdespont 2013-02-14 07:34:41

+0

@sdespont當然,對於真實的項目,您應該通過url,數據,類型等參數(或使用ajax請求和回調的一種設置對象)來增強此示例。 – 2013-02-14 07:44:29

+0

@ axel.michel能否爲您的評論添加更多細節?因爲這個供應商公司真正的Intranet項目的代碼。 – Neka 2013-02-14 07:56:09

0

因爲'children'變量定義了2次。

如你所知,函數有自己的局部變量的上下文。 如果你定義一個VAR一個變量,它屬於功能方面 (即使你使用相同的名字......)

}).done(function(data) { 
    var children = Array(); 
    // ... 

在這種情況下,孩子變量將關閉時的回調結束。 讓我們刪除第二個var用於訪問外部「子」的語法。

}).done(function(data) { 
    children = Array(); 
    // ... 
+0

它需要定義一個基於回調的函數,如@ axel.michel所說的。 :) – cwdoh 2013-02-14 07:39:01