2016-02-03 87 views
1

大家晚上好。我知道這對於很多人來說似乎是一個非常容易的主題,但我一直在努力重建我有的功能,以使其在整個網站範圍內具有動態性和可重用性。使用Javascript通過嵌套函數返回數組

我在使用下面是返回一個數組的主要鬥爭:

var arr = getData("admin/fullDatabaseAccess.php"); 

預期這不會返回數組。現在,不用寫什麼,我試圖返回它創建數組沒有到的getData功能每一個可能的變化,我會先告訴您哪些工作原有的功能:

function getData() { 

var xmlhttp = new XMLHttpRequest(); 
var url = "admin/fullDatabaseAccess.php"; 

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     processResponse(xmlhttp.responseText); 
    } 
} 
xmlhttp.open("GET", url, true); 
xmlhttp.send(); 

function processResponse(response) { 


    var arr = JSON.parse(response); 

    // do stuff with the array - I originally modified the DOM using jQuery here, however I now want to use this entire getData function as a more generically useful function 

    } 

} 

然後,我會在我使用此代碼的單個頁面上觸發getData函數以生成數組,然後使用數組數據修改頁面元素。

這使我我的問題 - 我試圖通過下面創建此版本,以及使用該代碼線I張貼在第一(VAR ARR =調用陣列數據,使這個功能重複使用的整個站點。 。)

function getData(file) { 

var xmlhttp = new XMLHttpRequest(); 
var url = file; 

xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     processResponse(xmlhttp.responseText); 
    } 
} 
xmlhttp.open("GET", url, true); 
xmlhttp.send(); 

function processResponse(response) { 
    var arr = JSON.parse(response); 


    return arr; 


} 

}

我似乎無法將數據反饋給變量。我已經嘗試過很多重構功能,返回巢內的值等,但我已經到了我迷惑自己,並不能真正展現我試過的例子,因爲我刪除了他們,並決定重新開始。

任何幫助將不勝感激!

回答

2

您需要提供一個回調getData,這樣

function getData(file, cb) { 
    var xmlhttp = new XMLHttpRequest(); 
    var url = file; 

    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     // Calls the callback function with the response data 
     cb(processResponse(xmlhttp.responseText)); 
    } 
    } 

    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 

    function processResponse(response) { 
    var arr = JSON.parse(response); 
    return arr; 

    } 
} 

getData(file, function(data) { 
    // data is now what's being returned from processResponse() 
}); 
+1

我很欣賞這個! processResponse()上的回調特定是我從未創建的缺失鏈接!感謝您的幫助 - 一切都運作完美。 – buzzkip