作为工作中的一个业余项目,我目前正在致力于实现 LiveChat Report Web 应用程序。基本上,它会将我们所有的 LiveChat 数据下载到 .csv 文件中以进行分析等。
我的整个工作进展顺利;但是,我很难理解如何根据返回的结果页面循环请求。例如,我想从每次聊天中获取某些信息。 LiveChat API 每个页面仅返回 25 个聊天。不幸的是,我无法一次调用每个页面,并且根据日期范围参数,每次的页面数量都会有所不同。如果可能的话,我希望将所有这些页面都保存在 1 个 csv 中。
我的请求如下:
function chatListReport() {
document.getElementById('chat_list_submit').addEventListener('click', function(event) {
var req = new XMLHttpRequest();
var params = {date_from:null,date_to:null, page:null};
params.date_from = document.getElementById('date_from').value;
params.date_to = document.getElementById('date_to').value;
params.page = document.getElementById('page').value;
req.onreadystatechange = function() { //when response received
if (req.readyState == 4 && req.status == 200) {
var response = (req.responseText);
var final = "data:text/csv;charset=utf-8," + encodeURI(response);
var link = document.createElement('a');
link.setAttribute('href', final);
link.setAttribute('download', 'ChatListSurveyReport.csv');
link.click();
}}
req.open('POST', '/chat_list_report', true); //submit update via POST to server
req.setRequestHeader('Content-Type', 'application/json'); //set request header
req.send(JSON.stringify(params));
event.preventDefault();
});
我的服务器端如下所示(使用 NPM liveChatAPI):
app.post('/chat_list_report', function(req, res){
var params = req.body;
api.chats.list(params, function(data){
var headers = 'Chat Date,Agent,PostChat Survey Rating,Comments';
var result = (data.chats || [])
.filter(function(chat) {return chat.type === "chat"})
.map(function(chat) {
var postSurvey = chat.postchat_survey || [];
return [
chat.ended.replace(",", ""),
chat.agents[0].display_name,
(postSurvey[0] || {}).value || "",
(postSurvey[1] || {}).value || "",
].join(',');
});
result.unshift(headers);
res.send(result.join('\n'));
});
});
我能够返回页数。它包含在返回的 JSON 中。简而言之,有没有办法将该页码响应返回到请求并循环请求 X 次,然后创建包含所有信息的 1 个 csv?现在,每个请求只能进行 25 次聊天。
谢谢!非常感谢任何帮助。
最佳答案
我们看到两种可能的解决方案:
1: A. 前端向后端发送请求,后端返回作业的ID,前端必须将作业的ID存储在前端,例如localStorage中。
B.此时,后端会自行处理作业,并尝试将其作为一个完整的任务来完成。
C.前端每隔几秒向后端发送一次有关该任务的请求,并给出其 ID。当任务未完成时,后端回复“进行中”, 前端继续查询任务,直到任务完成。
D.如果前端查询任务,此时收到通知 任务已完成,然后后端返回类似“finished”的消息 进一步完成信息。
E. GUI 应通知: o 等待响应 o 响应成功,链接下载文件。
---------或----------
2: A.前端向后端发送请求,后端注册任务后 完成任务会发送一封包含已完成数据的电子邮件。
B.前端通知该任务已添加到“队列”中,并且仅当它被添加时 完成后,将发送一封包含任务结果的电子邮件。
C.需要在前端添加额外的输入:电子邮件并处理某种电子邮件 API,例如:https://postmarkapp.com/
让我知道它是如何工作的,
干杯, 亚当
关于javascript - API 请求循环 Node.js 和 LiveChat API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281090/