JQuery Отложенное исключение: дублирующий параметр не разрешен - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю над приведенной ниже функцией в Javascript, чтобы извлечь данные из двух отдельных списков в SharePoint и передать полученные данные другой функции.Последние несколько часов я пытался отладить эту функцию со следующей ошибкой:

jQuery.Deferred исключение: дублирующее имя параметра не допускается в этом контексте SyntaxError: дублирующееся имя параметра не допускается в этом контекстев массиве.

и мне сообщили, что в этой строке происходит ошибка:

  successFunction(RecordResponse, RecordAmountResponse)

Странно, она проходит через обе функции .done и выдает соответствующие флажки проверки, но я знаю, что не могу изменить параметры в .then (function () {}), иначе моя successFunction не получит необходимые данные ответа.

Вот функция, которую я вызываю:

function getReportData(strRecordQuery, strRecordAmountQuery, successFunction, failFunction) {

    // Use promise methods to run getListQuery from both tblRecord and tblRecordData

    var RecordDataInfo = $.Deferred();
    var RecordAmountDataInfo = $.Deferred();

    var dfdRecordDataFiles;
    var dfdRecordAmountDataFiles;

    dfdRecordDataFiles = getListQuery('lstRecord', strRecordQuery, true);

    dfdRecordAmountDataFiles = getListQuery('lstRecordAmount', strRecordAmountQuery, true);

    dfdRecordDataFiles.done(function(RecordDataResponse) {
        console.log("dfdRecordDataFiles.done");
        RecordDataInfo.resolve(RecordDataResponse);
    });

    dfdRecordAmountDataFiles.done(function(RecordAmountDataResponse) {
        console.log("dfdRecordAmountDataFiles.done");
        RecordAmountDataInfo.resolve(RecordAmountDataResponse);
    });

    dfdRecordDataFiles.fail(function(error) {
        console.log("dfdRecordDataFiles.fail");
        console.log("ResponseText: " + error.responseText);
        console.log(JSON.stringify(error));
        RecordDataInfo.fail(error);
    });

    dfdRecordAmountDataFiles.fail(function(lerror) {
        console.log("dfdRecordAmountDataFiles.fail");
        console.log("ResponseText: " + lerror.responseText);
        console.log(JSON.stringify(lerror));
        RecordAmountDataInfo.fail(lerror);
    });

    $.when(RecordDataInfo, RecordAmountDataInfo)
        .then(function(RecordResponse, RecordAmountResponse) {
          successFunction(RecordResponse, RecordAmountResponse)
        }, function(error, lerror) {
          failFunction(error, lerror);
        });
};

Могу ли я получить второй набор глазных яблок, чтобы помочь мне, так как мои устали смотреть на это и не получать его.

Редактировать

Я изменил свой код в соответствии с предложением, но получаю похожую ошибку:

function getListQuery(listName, queryString) {

    // REST Call
    return $.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/GetByTitle('" + listName + "')/items?" + queryString,
        type: "GET",
        headers: { ACCEPT: "application/json;odata=verbose" }
    });
};

function getReportData(strRecordQuery, strRecordAmountQuery, strRecordPersonnelQuery) {

    return $.when(getListQuery('lstRecord', strRecordQuery, true), getListQuery('lstRecordAmount', strRecordAmountQuery, true), getListQuery('lstRecordPersonnel', strRecordPersonnelQuery, true))
};

function setReportQueries(Yr0, Yr1, Yr2, Yr3, Yr4) {

    // Specific to the report
    strRecordQuery = "$select=ID,RecordName";
    strRecordAmountQuery = "$select=ID,Parameter1,Year,Amount&$filter=(Year eq '" + Yr0 + "') or (Year eq '" + Yr1 + 
                        "') or (Year eq '" + Yr2 + "') or (Year eq '" + Yr3 + "') or (Year eq '" + Yr4 + "')"; 
    strRecordPersonnelQuery = "$select=ID, Parameter1&$filter=(Year eq '" + Yr0 + "') or (Year eq '" + Yr1 + 
                        "') or (Year eq '" + Yr2 + "') or (Year eq '" + Yr3 + "') or (Year eq '" + Yr4 + "')";

    getReportData(strRecordQuery, strRecordAmountQuery, strRecordPersonnelQuery).then(loadReportTables);

};

function loadReportTables(RecordData, RecordAmountData, RecordPersonnelData) {

console.log("Enter loadReportTables()");

/* Do Stuff */

}

Я получаю следующую ошибку:

jQuery.Deferred исключение: повторяющееся имя параметранедопустимо в этом контексте SyntaxError: Дублирующее имя параметра не разрешено в этом контексте при l (https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js:2:29375) при c (https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js:2:29677) не определено

...