簡體   English   中英

SharePoint中的其余API多個列表

[英]Rest API Multiple Lists in SharePoint

由於SharePoint是異步工作的,因此我無法將數組中多個列表中的數據存儲起來,以后再訪問它們。

我需要使用3個列表,因為它們包含來自員工,假期等的數據。

請參閱下面的代碼以獲取更多信息。

有沒有更簡單的方法來使用SharePoint和多個列表來獲取數據。 我也嘗試了executequeryasync,但是找不到多個列表的有效解決方案。 或者將每個列表的值存儲在數組或變量中,並在另一個函數中使用它,因為它是異步的。

$(function () {
$('#title').html("Inloggen verlofaanvraag");
});


function inLoggen() {
var initialen = $('#initialen').val();
var wachtwoord = $('#wachtwoord').val();

$.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Lijst werknemers')/Items?$filter=wInitialen eq '" + initialen + "' and wWachtwoord eq '" + wachtwoord + "'",
    type: "GET",
    headers: { "accept": "application/json;odata=verbose" },
    success: function (data) {
        var x = data.d.results;
        var werknemers = data.d.results;
        for (var i = 0; i < x.length; i++) {
            rInitialen = x[i].wInitialen;
            rWachtwoord = x[i].wWachtwoord;
            rVolledigenaam = x[i].wVolledigenaam;

        }

        if (i === 0) {
            alert("U hebt geen toegang tot deze pagina !");
        }
        else {
            $('#title').html("Welkom " + rVolledigenaam);
            $('#inlogform').hide();
            persoonlijketellers(werknemers);
        }
    },
    error: function (xhr) {
        console.log(xhr.status + ': ' + xhr.statusText);
    }
});
}


function persoonlijketellers(werknemers) {

var rId = werknemers[0].ID;

$.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Lijst persoonlijke tellers')/Items?$filter=pWerknemer eq '" + rId + "'",
    type: "GET",
    headers: { "accept": "application/json;odata=verbose" },
    success: function (data) {
        var x = data.d.results;
        var ptellers = data.d.results;
        for (var i = 0; i < x.length; i++) {

        }

        wettelijkeverlofdagen(werknemers, ptellers);

    },
    error: function (xhr) {
        console.log(xhr.status + ': ' + xhr.statusText);
    }
});
}

function wettelijkeverlofdagen(werknemers, ptellers) {

var rId = ptellers[0].ID;

alert(rId);

$.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Lijst persoonlijke tellers')/Items?$filter=pWerknemer eq '" + rId + "'",
    type: "GET",
    headers: { "accept": "application/json;odata=verbose" },
    success: function (data) {
        var x = data.d.results;
        var ptellers = data.d.results;
        for (var i = 0; i < x.length; i++) {

        }

    },
    error: function (xhr) {
        console.log(xhr.status + ': ' + xhr.statusText);
    }
});
}

您可以將多個列表中的數據存儲在數組中,並在所有異步調用完成后訪問它們,您只需要使用某種promise模式即可。

jQuery的.when方法在以下情況下可能是最有用的:

function SPData() {
    function getJsonDataAsync(url) {
        // returning the $.ajax object is what makes the next part work...
        return $.ajax({
            url: url,
            method: "GET",
            contentType: "application/json",
            headers: {
                accept: "application/json;odata=verbose"
            }
        });
    }

    var requestURI1 = _spPageContextInfo.webServerRelativeUrl + "/_api/lists/..."
    var requestURI2 = _spPageContextInfo.webServerRelativeUrl + "/_api/lists/..."
    var requestURI3 = _spPageContextInfo.webServerRelativeUrl + "/_api/lists/..."            
    var req1 = getJsonDataAsync(requestURI1);
    var req2 = getJsonDataAsync(requestURI2);
    var req3 = getJsonDataAsync(requestURI3);
    // now we can do the next line, because req1/2/3 are actually deferreds
    // being returned from $.ajax
    jQuery.when(req1, req2, req3).done(function(resp1, resp2, resp3) {
        /* do something with all of the requests here...
           resp1/2/3 correspond to the responses from each call and are each an
           array that looks like: [data, statusText, jqXHR], which means that your
           data is in resp1[0], resp2[0], etc. */
    });

如果需要的話,您也可以只將返回的值分配給更高級別上下文中的變量,然后使用各個jQuery延遲來確保在開始使用數據之前所有調用都已成功完成...

...
    var x1, x2, x3;            
    // use the .then(function() { ... }) pattern because we are just returning a
    // deferred/promise from $.ajax
    getJsonDataAsync(requestURI1).then(function(data) {
        x1 = data;
        getJsonDataAsync(requestURI2).then(function(data2) {
            x2 = data2;
            getJsonDataAsync(requestURI3).then(function(data3) {
                x3 = data3;
                // do something with x1, x2, and x3
            });
        });
    });    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM