gpt4 book ai didi

javascript - 尝试通过ajax获取Excel文档,遇到异步问题

转载 作者:行者123 更新时间:2023-12-03 22:33:39 27 4
gpt4 key购买 nike

我正在将 JavaScript 添加到 SharePoint,并尝试编写一个函数来从库中获取 Excel 文档,或者更确切地说是其中的数据。我已经知道如何做到这一点,但有问题的文件太大而无法返回。我考虑过手动设置ajax的大小限制,但我还没有找到任何方法来做到这一点,所以B计划是为每一行发送一个查询

$("#button").click(function() {
readFileRow(libraryUrl, "FileName.xlsx", "Sheet1", 1, "E", [])
.done(function(cells) {
console.log(xmlToJson(cells.documentElement));
});
});

/**
* Reads a file in SharePoint Library via ExcelRest and returns the document
*
* @params string libraryUrl
* @params string fileName
* @params string sheetName
* @params int rowNum
* @params string lastColumn
* @params string[][] finalResults
*
* @returns string[][]
**/
function readFileRow(libraryUrl, fileName, sheetName, rowNum, lastColumn, finalResults) {
var fileUrl = libraryUrl + "/" + fileName + "/Model/Ranges('" + sheetName + "!A" + rowNum + "|" + lastColumn + rowNum + "')?$format=atom";

return $.ajax({
url: fileUrl,
type: "GET",
error: function (request, status, error) {
console.log(error);
},
}).done(function(data) {
jsonData = xmlToJson(data.documentElement);
cells = serializeRange(jsonData);

if(cells) {
finalResults.push(cells);
rowNum++;
finalResults = readFileRow(libraryUrl, fileName, sheetName, rowNum, lastColumn, finalResults);
}

return $.when(finalResults);
});
}

如您所见,我试图通过在请求返回数据时递归调用该函数来解决异步问题,这意味着它必须继续运行。当我在返回之前放置 console.log() 时,我可以看到它正在根据我的需要编译结果。然而,调用 readFileRow() 的返回结果会在进程完成之前返回,并且包含来自第一个 ajax 查询的响应,显然尚未通过 .done() 函数运行。我尝试删除 ajax 调用前面的 return,但这只会导致异常,因为 return 不再可用,因此没有 .done() 函数。

谁能发现这个函数有什么问题吗?异步函数不是我的强项,我很困惑。

最佳答案

看起来答案很简单,我没有完全理解与异步函数相关的各种方法正在做什么。我通过以下方式重组了该函数并使其按预期工作:

    $("#updateClusterDetails").click(function() {
console.log("Update initiated");
var baseFile = "AIF%20Test.xlsx";

$.when(readFileRow(libraryUrl, baseFile, "Sheet1", 1, "E", new Array())).then(function(results) {
console.log(results);
});
});

/**
* Reads a file in SharePoint Library via ExcelRest and returns the document
*
* @params string libraryUrl
* @params string fileLocation
*
* @returns Document/HTML
**/
function readFile(libraryUrl, fileLocation) {
// The base url for the SharePoint document library
var fileUrl = libraryUrl + fileLocation;

return $.ajax({
url: fileUrl,
type: "GET",
error: function (request, status, error) {
console.log(error);
},
success: function(data) {
return $.when(data);
}
});
}

/**
* Reads a series of rows in an Excel file in SharePoint Library via ExcelRest and returns the row data
*
* @params string libraryUrl
* @params string fileName
* @params string sheetName
* @params int rowNum
* @params string lastColumn
* @params string[][] currentResults
*
* @returns string[][]
**/
function readFileRows(libraryUrl, fileName, sheetName, rowNum, lastColumn, currentResults) {
var fileUrl = "/" + fileName + "/Model/Ranges('" + sheetName + "!A" + rowNum + "|" + lastColumn + rowNum + "')?$format=atom";

return readFile(libraryUrl, fileUrl)
.then(function(data) {
jsonData = xmlToJson(data.documentElement);
cells = serializeRange(jsonData);

if(!cells) {
return $.when(currentResults);
}
else {
currentResults.push(cells);
return $.when(readFileRow(libraryUrl, fileName, sheetName, rowNum + 1, lastColumn, currentResults));
}

});
}

关于javascript - 尝试通过ajax获取Excel文档,遇到异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com