目标:从API中解析JSON,其中结果列在多个页面中。
我是JSON的新手并且一般都使用数据。我想知道如何编写一个函数来更新url,输出每个页面的结果,以及当它到达一个空的时候停止。
这里的问题来自Shopify网址,显示用于琐碎目的的JSON数据,而不是真实应用程序的一部分。
每个页面都有5个对象。我正在向网址发出$.ajax
请求,但网址为page=1
作为查询,
$.ajax({
url:"https://shopicruit.myshopify.com/admin/orders.json?page=1&access_token=c32313df0d0ef512ca64d5b336a0d7c6",
method:'get',
dataType:'JSON'
}).done(function(response){
所以我只回来的response
仅适用于第一页的结果(显然)。我知道如果我手动添加2
代替1
我可以看到不同的数据,那么有更多页面b / c。这会持续多个页面。我已经尝试删除页面选项,将其设置为全部和任何这些只是显示页面1.我想可能离开页面选项将解决问题,但事实并非如此。
如何通过ajax调用获取所有数据页面?
它是一个在其中进行$.ajax
调用的函数,它会添加页面++并为每个页面调用一个新函数吗?我仍然不知道如何悲伤地写出来。
shopify API文档确实提供了一些关于如何显示“所有数据”的示例,但我尝试使用他们建议的内容并且它不起作用所以我不确定它是否适用于该问题,但以防万一是 - https://help.shopify.com/api/reference/order
答案 0 :(得分:1)
这是一个简单的答案 - 这将获得页面,直到明显没有更多数据 - 即一旦页面返回少于limit
个订单
function getAllData(page) {
return $.ajax({
url:"https://shopicruit.myshopify.com/admin/orders.json?page=" + (page || 1) + "&limit=250&access_token=c32313df0d0ef512ca64d5b336a0d7c6",
method:'get',
dataType:'JSON'
}).then(function(response){
if (page && response.orders.length == 250) {
return getAllData(page + 1)
.then(function (more) {
return response.orders.concat(more)
})
}
return response.orders;
});
}
getAllData(1).then(function(orders) {
// orders is an array of orders
});
注意我已经使用250
limit
一次获得250
我说这很简单,因为它确实获得了所有数据,但是,您需要等到所有数据都被检索后再使用它 - 这可能需要很长时间才能实现您的用户体验&#34 ; - 但是这应该让你到一个可以开始的地方
代码中有这样的逻辑:如果页面为0,则只检索第一页,无论其中有多少项 - 所以你可以做类似的事情
getAllData().then(function(page1data) {
// do something with page 1
}).then(function() {
return getAllData(2); // start at page 2
}).then(function(restOfData) {
// do something with restOfData, pages 2+
});
我不确定的一件事是
.then(function(response){
您可能需要将其更改为
.then(function(r){
var response = r[0];
我不是100%肯定jQuery的.then
回调参数