Tôi đang thêm JavaScript vào SharePoint và tôi đang cố gắng viết một hàm lấy tài liệu Excel, hay đúng hơn là dữ liệu trong đó, từ thư viện. Tôi đã tìm ra cách để làm điều đó, nhưng các tệp trong câu hỏi quá lớn để được trả lại. Tôi đã xem xét việc đặt giới hạn kích thước cho ajax theo cách thủ công, nhưng tôi chưa tìm thấy cách nào để thực hiện việc này, vì vậy Kế hoạch B là gửi truy vấn cho mỗi hàng
$("#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);
});
}
Như bạn có thể thấy, tôi đang cố gắng khắc phục sự cố không đồng bộ bằng cách gọi hàm đệ quy khi yêu cầu quay lại với dữ liệu, nghĩa là nó phải tiếp tục chạy. Khi tôi đặt console.log () ngay trước khi trả về, tôi có thể thấy rằng nó đang biên dịch kết quả khi tôi cần. Tuy nhiên, trả về từ việc gọi readFileRow () sẽ quay trở lại trước khi quá trình kết thúc và bao gồm phản hồi từ truy vấn ajax đầu tiên, dường như không được chạy qua hàm .done (). Tôi đã thử xóa trả lại trước lệnh gọi ajax, nhưng điều này chỉ gây ra ngoại lệ, vì trả lại không còn có thể sau đó và do đó không có hàm .done ().
Bất cứ ai cũng có thể phát hiện ra những gì sai với chức năng này? Các chức năng không đồng bộ không phải là sở trường của tôi và tôi khá bối rối.