使用JS递归调用xml Web服务

时间:2015-04-09 09:09:19

标签: javascript web-services

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

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

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


所以我的问题是:

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

我怎样才能使用网络服务,我需要点几次,例如,如果我总共获得10,000个结果,并且该服务一次只返回1,000个。

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

由于“Access-Control-Allow-Origin”原因我最初无法使用async:true,因此有哪些方法可供使用。我无法修改网络服务。


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

会欣赏伪代码的回复,我只是开始学习JS,所以不知道它能做什么。

1 个答案:

答案 0 :(得分:1)

您可以使用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);
}