這是一種令人尷尬的問題,但我卡住了。 我的背景是託管代碼,我從來沒有學過JavaScript,但我想實現一個小小的項目。 該腳本正在SharePoint 2010上運行,使用JavaScript對象模型從自定義列表中查詢項目,並分別填充Google圖表或表格。 在MSDN和Google Developer的幫助下,我能夠從一個列表中查詢數據並將其可視化。JavaScript代碼設計異步/回調
但是,我無法將概念傳輸到查詢多個列表,合併結果集並最終傳遞給Google API。 在我的代碼中,我創建了一個回調鏈,如showChart-> loadListData-> drawChart。這證明是不好的設計,因爲它不靈活,不能擴展。所有API方法都是異步的,並且沒有返回值,但期望方法名稱在完成後調用。這就是我的堅持和我缺乏知識的地方。
我很滿意每一條評論和答案,如果需要,我也可以提供實際的源代碼。謝謝你在前進,託比
UPDATE如要求通過@Utkanos:
var listItems;
$(document).ready(function() {
ExecuteOrDelayUntilScriptLoaded(loadChartData, "sp.js");
});
function loadChartData() {
var camlQuery = SP.CamlQuery.createAllItemsQuery();
camlQuery.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Year'/><Value Type='Text'>2015</Value></Eq></Where></Query></View>");
loadListData('CustomList', camlQuery, drawChart, readListItemFailed);
}
function loadListData(listTitle, camlQuery, onSuccess, onFail) {
context = SP.ClientContext.get_current();
var list = context.get_web().get_lists().getByTitle(listTitle);
var listItems = list.getItems(camlQuery);
context.load(listItems);
context.executeQueryAsync(function(sender, args){onSuccess(listItems);}, onFail);
}
function drawDpOverviewChart(listItems) {
var data;
var enumerator = listItems.getEnumerator();
data = new google.visualization.DataTable();
data.addColumn('string', 'Column1');
data.addColumn('number', 'Column2');
var listItem;
while (enumerator.moveNext()) {
listItem = enumerator.get_current();
data.addRow([listItem.get_item('Title'), Math.round(listItem.get_item('Balance')/10000)/100]);
}
var options = {'title':'Pretty Chart'};
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
function readListItemFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
請發表您的代碼。 – Utkanos
[我該如何等待一組異步回調函數?](http://stackoverflow.com/questions/10004112/how-can-i-wait-for-set-of-asynchronous-callback-functions) – JJJ
如果您的列表具有查找字段,您可以使用[REST API](https://msdn.microsoft.com/en-us/library/ff798339.aspx)在單個調用中「加入」這些字段... – WhiteHat