0

新手到腳本,所以請親切。
試圖使用jquery-csv分析器從本地文件創建圖表。使用谷歌viz。
這段代碼我似乎無法得到返回值。 要求選定解析文件的返回值。從嵌套函數獲得返回值

使用回調更好嗎?以及我將如何實施?已經嘗試,但似乎不能得到它的權利。

function chartData(fileToParse) { 
var reader = new FileReader(); 
reader.readAsText(fileToParse); 
reader.onload = function(){ 
    var csv = event.target.result; 
var parsedData = $.csv.toArrays(csv,{onParseValue:$.csv.hooks.castToScalar}); 
return parsedData 
}; 
return reader.onload.value; 

reader.onerror = function(){ alert('Unable to read ' + file.fileName); }; 

}

我已經使用這個代碼修改,以在屏幕上顯示的表形式的數據,但都碰了壁與它獲得的谷歌服務器。

任何意見或指針非常感謝。

+0

什麼是讀取'返回reader.onload.value行了你想要的結果; '?您是否希望chartData函數返回由reader的onload方法加載的值? –

+0

我需要(我認爲)從csv解析的數據,所以我可以使用'arraytoDataTable'。見下文。謝謝。 – Tribblehunter

回答

1

「使用回撥比較好嗎?」

是的,這將是妥善解決

「以及如何,我會實現嗎?」

  1. 定義您的chartData功能的第二個參數。

  2. 當您調用chartData時,請將回調作爲第二個參數傳遞。

  3. 在事件處理程序中,以與調用任何函數相同的方式調用回調,但將所需的數據傳遞給它。


    // receive it-----v 
function chartData(fileToParse, callback) { 
    var reader = new FileReader(); 
    reader.readAsText(fileToParse); 
    reader.onload = function() { 
     var csv = event.target.result; 
     var parsedData = $.csv.toArrays(csv, { 
      onParseValue: $.csv.hooks.castToScalar 
     }); 
     callback(parsedData); // call it 
    }; 

    reader.onerror = function() { 
     alert('Unable to read ' + file.fileName); 
    }; 
} 

所以你會調用它是這樣的:

chartData('file/path', function(parsed) { 
    console.log(parsed); 
}); 
+0

感謝您的及時回覆。 – Tribblehunter

+0

oops。錯誤的關鍵。剛剛嘗試過,並拋出了'不是一個數組'。再次查看代碼。我在想我錯過了什麼。 – Tribblehunter

+0

再次感謝您的幫助。上面的代碼工作,但它似乎大多數我的其他嘗試以某種方式工作,它是導致問題的jquery-csv。很好地解析代碼,但谷歌不理解它。進一步研究它。 – Tribblehunter

0

首先,請不要問我們要善待爲是一個「不厚道」的假設在你的部分

通常,你不能從異步函數返回一個值。你應該考慮爲什麼你想返回一個值,並看看你是否可以從另一個角度來看待它。例如,你需要怎樣處理parsedData ......填充一個textarea?,將一些元素附加到Dom?..然後在那裏做!

讓我們知道你需要從parsedData中得到什麼,我們可以提供幫助。

最後,在絕望中您可以將響應附加到一個全局對象如窗口,但是,這將創造的其他一系列問題

+0

我對'善良'評論道歉。它的味道很好。 – Tribblehunter

+0

oops。必須停止按回車。價值被髮送到谷歌圖表,但我只是調整了代碼,它返回'不是一個有效的二維數組'。我們將進一步研究數組是如何構建的,並與其他谷歌viz代碼進行比較。謝謝大家迄今爲止的幫助。 – Tribblehunter