gpt4 book ai didi

javascript - 使用JS递归调用xml web服务

转载 作者:行者123 更新时间:2023-12-03 10:23:15 25 4
gpt4 key购买 nike

我对逻辑和实现都有疑问,到目前为止,谷歌搜索对我没有任何用处。

  • 我需要访问一个网络服务,该服务可以一次为我提供 1,000 个结果time 查询可以返回大约 21,000 个结果
  • 我无法控制网络服务,只需要使用它
  • JS 在本地计算机或另一个网络服务器上运行(即不是包含数据的服务器)

所以我写了一个小的js脚本来调用它并解析数据,现在我的问题是我使用同步调用(即async: false)编写它。这带来了一系列问题,其中一些问题意味着它似乎只能在 Chrome 上运行,而不能在其他浏览器上运行。

<小时/>

所以我的问题是:

如何处理异步调用和解析结果的逻辑? - 当我结束通话时,我没有任何结果,他们会稍后才进来。我该如何正确使用它们?

如何使用需要多次查看的网络服务来执行此操作,例如,如果我总共获得 10,000 个结果,而该服务一次仅返回 1,000 个结果。

我对问题的这两方面感到相当困惑,希望得到任何帮助。我尝试过使用ajax和cors,它们都在不同程度上工作,但我不明白如何处理第二部分(一次只获取结果的子集)。

鉴于最初由于“Access-Control-Allow-Origin”我无法使用 async: true,有哪些方法可以实现此目的。而且我无法修改网络服务。

<小时/>

解析处理已经完成,我解析每个单独的 xml 回复以提取我需要的数据并在稍后阶段处理所有数据。

非常感谢伪代码的回复,我才刚开始学习 JS,所以不知道它能做什么。

最佳答案

您可以使用promises :

// calls your web service asynchronously   
function request(page) {
return $.ajax({
url: '/xml-service/',
method: 'POST',
dataType: 'json',
data: {
delay: 1,
json: JSON.stringify(ret)
}
});
}

// retrieve all results recursively
function requestItems(page, items) {
return request(page).then(function(data){
if (data.currentPage > data.totalPage) {
return items;
} else {
return requestItems(data.currentPage + 1, items.concat(data.items));
}
});
}

function requestAll(){
return requestItems(1, []);
}

requestAll().done(function(items) {
console.dir(items);
}

关于javascript - 使用JS递归调用xml web服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534291/

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