Я надеялся, что кто-то может дать мне указатель на то, как добиться следующего.Рекурсивный запрос ajax
В настоящее время у меня есть:
функция А JS: Запрос JQuery AJAX, который будет получать элементы из пользовательского списка SharePoint.
Функция JS: это приведет к тому, что результаты списка будут перенесены в datatable.
Функция JS, которая может превратить InitatorId в настоящее имя пользователя (GetDisplayName).
function GetDisplayName(userid) { var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")"; var requestHeaders = { "accept" : "application/json;odata=verbose" }; $.ajax({ url : requestUri, contentType : "application/json;odata=verbose", headers : requestHeaders, success : GetDisplayNameSuccess, error : GetDisplayNameFail }); } function populateMyOutstandingItems() { SP.SOD.executeFunc("sp.js", "SP.ClientContext", function() { SP.SOD.executeFunc("sp.runtime.js", "SP.ClientContext", function() { var context = SP.ClientContext.get_current(); var queryUrl = "https://companyname.sharepoint.com/subsite/_api/Web/Lists/getbytitle('Read%20Requests')/GetItems"; //change the Url var camlXML = "<Query><Where><And><Eq><FieldRef Name='ReaderId' LookupId='True' /><Value Type='Integer'>" + _spPageContextInfo.userId + "</Value></Eq><Neq><FieldRef Name='Read' /><Value Type='Text'>YES</Value></Neq></And></Where></Query>" var requestData = { "query" : {"__metadata": { "type": "SP.CamlQuery" } , "ViewXml": camlXML } }; return jQuery.ajax({ url: queryUrl, type: "POST", data: JSON.stringify(requestData), headers: { "X-RequestDigest": $("#__REQUESTDIGEST").val(), "Accept": "application/json; odata=verbose", "Content-Type": "application/json; odata=verbose" }, success: onQuerySuccessMyOutstandingItems, error: onQueryErrorMyOutstandingItems }); }); }); } function onQuerySuccessMyOutstandingItems(data) { var jsonData = data.d.results console.log(jsonData) $("#resultsDivMyOutstandingItems").dataTable({ "data" : jsonData, columns: [ { data: "Document_x0020_Name" }, { data: "Document_x0020_Library_x0020_Nam" }, { data: "Request_x0020_Made_x0020_Date" }, { data: "InitatorId" }, { data: "Request_x0020_ReadBy_x0020_Date" }, ], order: [[3, "asc"]] }); }
На данный момент в DataTable, я имею InitatorID (то есть. 30), но я хотел бы иметь реальное имя пользователя в таблице.
Я понимаю, что потребуется какой-то рекурсивный запрос AJAX, но я не уверен, что лучший путь для этого будет, и надеялся, что кто-то сможет указать мне в правильном направлении.
После прочтения немного о прикованных запросов, я попытался код ниже, но это не так, я предполагаю, что, поскольку Chrome жалуется на «неожиданное окончание»:
var request = $.ajax({
url: queryUrl,
type: "POST",
data: JSON.stringify(requestData),
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"Accept": "application/json; odata=verbose",
"Content-Type": "application/json; odata=verbose"
}
}),
chained = request.then(function(data) {
return $.ajax(spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + data.InitatorId + ")",
{ data: { user: data.Title }})
});
chained.done(function(data) {
console.log(data)
});
Короче, то, что является лучшим для достижения что я пытаюсь сделать?
Большое спасибо Glen
Отлично, спасибо! Я использовал идею вложенного ajax. Сегодня я отправлю свое полное решение. – Glen226
Надеюсь, это помогло! Не забудьте отметить ответ как правильный, если он действительно вам помог, и удачи с кодом! – CrackAttack