Прежде всего извините за плохой титул, просто не могу придумать ничего лучше.Как вызвать executeQueryAsync несколько раз
Я очень новичок в JavaScript, что может быть единственной причиной, по которой я просто этого не понимаю - пожалуйста, не взорвите меня.
То, что я хочу сделать, это просто запрос множественного Sharepoint списков (возможно, даже несколько раз ) из Sharepoint сайта с помощью JavaScript Client Object Model. Мне удалось найти много рабочих примеров в Интернете, как извлекать данные из списка и работать с ним. Но я так не знаком с концепциями асинхронного и обратного вызова, что я не могу передать эту концепцию моим потребностям. Действительно ли мне нужно скопировать все переменные и функции x раз?
Вот что я для одного звонка:
var listAItems;
$(document).ready(function() {
ExecuteOrDelayUntilScriptLoaded(LoadChartData, "sp.js");
});
function LoadChartData() {
context = SP.ClientContext.get_current();
var listA = context.get_web().get_lists().getByTitle("ListA");
var camlQuery = SP.CamlQuery.createAllItemsQuery();
this.listAItems = listA.getItems(camlQuery);
context.load(listAItems);
context.executeQueryAsync(ReadListAItemSucceeded, ReadListItemFailed);
}
function ReadListAItemSucceeded(sender, args) {
var listAItemsCollection = listAItems.getEnumerator();
while (listAItemsCollection.moveNext()) {
var listAItem = listAItemsCollection.get_current();
//do something with each listItem
}
}
function ReadListItemFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Я в конечном итоге копирование всего кода, чтобы он работает, но это не может быть путь, так как это просто беспорядок - там должно быть фактический дизайн.
var listAItems;
var listBItems;
$(document).ready(function() {
ExecuteOrDelayUntilScriptLoaded(LoadChartData, "sp.js");
});
function LoadChartData() {
context = SP.ClientContext.get_current();
var listA = context.get_web().get_lists().getByTitle("ListA");
var camlQuery = SP.CamlQuery.createAllItemsQuery();
this.listAItems = listA.getItems(camlQuery);
context.load(listAItems);
context.executeQueryAsync(ReadListAItemSucceeded, ReadListItemFailed);
context2 = SP.ClientContext.get_current();
var listB = context.get_web().get_lists().getByTitle("ListB");
var camlQuery2 = SP.CamlQuery.createAllItemsQuery();
this.listBItems = listB.getItems(camlQuery2);
context2.load(listBItems);
context2.executeQueryAsync(ReadListBItemSucceeded, ReadListItemFailed);
}
function ReadListAItemSucceeded(sender, args) {
var listAItemsCollection = listAItems.getEnumerator();
while (listAItemsCollection.moveNext()) {
var listAItem = listAItemsCollection.get_current();
//do something with each listItem
}
}
function ReadListBItemSucceeded(sender, args) {
var listBItemsCollection = listBItems.getEnumerator();
while (listBItemsCollection.moveNext()) {
var listBItem = listBItemsCollection.get_current();
//do something with each listItem
}
}
function ReadListItemFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Почему я хочу запросить несколько списков, очевидно, причиной для запроса тот же список, чтобы обеспечить различные выражения CAML с различными, где условия, например.
спасибо, что заблаговременно!
Почему йо u не использовать один контекст и загружать его с помощью 'listAItems' и' listBItems'? –
@ DanielB, спасибо за комментарий! Причиной могут быть неправильные предположения. Я сделал это, потому что auf глобальная переменная, которая передается методу context.load и доступна в обратном вызове успеха для получения перечислителя. – Toby