循环遍历分页的 API JavaScript
Loop through paginated API javascript
我一直在尝试创建一个函数来调用分页API,遍历每个页面并向数组添加一个JSON值。我希望函数返回数组。
该函数对 api 进行初始调用,并通过计算从所有页面返回的结果数并除以 10(每页的结果数为 10)来计算它必须循环的次数。到目前为止,该函数如下所示:
function loopPages(url) {
$.getJSON(url, function (data) {
var pages = Math.ceil(data.count/10 + 1);
var i;
var myList = [];
for (i = 1; i < pages; i++) {
$.getJSON("http://urladdress.com/?page=" + i, function (data) {
obj = data.results;
$.each(obj, function (k, v) {
myList.push(v.city_name);
});
return myList
});
}
});
}
loopPages('http://urladdress.com/?page=1');
但是,我无法确定 return 语句应该去哪里以及如何从函数外部访问数组。
我也在寻找这个问题的其他解决方案(我想这很常见),但一无所获。任何帮助非常感谢!
$.getJSON
方法是异步的,因此您需要使用回调来使用您获得的数据作为结果。骨架代码是这样的:
function loopPages(url, callback) {
// ...
$.getJSON("...", function (data) {
// ...
callback(myList);
});
});
所以你只需要类似地定义回调:
function callback(myList) {
// fill your data grid
}
现在,loopPages
函数可以像这样使用:
loopPages('http://urladdress.com/?page=1', function (myList) {
// fill your data grid
});
PS:在此之后,应该很清楚,这确实是相当重复的...
getJSON 函数是异步运行的,因此它实际上会在作业完成之前返回,因此不允许你对成功函数的返回数据执行任何操作。
您可以做的是将 myList 变量设置为全局变量,只需从函数中删除 var:
将其从:
function loopPages(url) {
$.getJSON(url, function (data) {
var pages = Math.ceil(data.count/10 + 1);
var i;
var myList = [];
自:
function loopPages(url) {
$.getJSON(url, function (data) {
var pages = Math.ceil(data.count/10 + 1);
var i;
myList = [];
我还建议让页面全球化做同样的事情。
您可以完全删除 return 语句。
我还建议不要在函数中执行多个 ajax 调用,这可能会使 myList 可能会乱序,因为 ajax 调用可能会过早完成。
所以这样想:
- 循环页面运行...
- 返回到 JS 以运行其他所有内容。
- loopPages ajax 完成,运行成功函数。
在成功函数的 while 循环中:
- 第一阿贾克斯
- 第二个阿贾克斯
- 第三届阿贾克斯
- 第二次阿贾克斯回归
- 第一个 AJAX 返回
- 第三次阿贾克斯回归
现在你的我的列表看起来像第二,第一,第三
只是对脚本的其余部分进行一些思考。
HTML:-
<!DOCTYPE html>
<html>
<head>
<title>pagination</title>
<link rel="stylesheet" href="pathofcssfile.css">
</head>
<body>
<div>
<table id="user"></table>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<ul>
<li value="1">1</li>
<li value="2">2</li>
<li value="3">3</li>
<li value="4">4</li>
<li value="5">5</li>
<li value="6">6</li>
<li value="7">7</li>
<li value="8">8</li>
<li value="9">9</li>
<li value="10">10</li>
</ul>
<script src="pathnameofjsfile.js" type="text/javascript"></script>
</body>
</html>
.JS:-
var xhr = new XMLHttpRequest();
xhr.open('GET',"https://jsonplaceholder.typicode.com/albums",true);
xhr.send();
var udata;
xhr.onload = function()
{
if(this.status == 200)
{
var userdata = JSON.parse(this.responseText);
console.log(userdata);
udata = userdata;
data(1);
}
}
$("li").click(function ()
{
var a = $(this).attr("value");
console.log("value li "+ a);
data(a);
});
function data(a)
{
var output = "";
for(i=((a-1)*10);i<(a*10);i++)
{
output +='<tr>'+
'<td>'+ udata[i].userId + '</td>'+
'<td>'+ udata[i].id + '</td>'+
'<td>'+ udata[i].title + '</td>'+ '<br>'
'</tr>';
}
document.getElementById('user').innerHTML = output;
}
.CSS:-
ul{
display: flex;
list-style-type:none;
padding: 20px;
}
li{
padding: 20px;
}
td,tr{
padding: 12px;
}
相关文章:
- 如何使用Google Sheets API+Javascript阅读电子表格
- 获取gmail-api-javascript中的主题行
- 熟练的API JavaScript函数
- 如何从 html 文档中调用 yahoo weather api javascript 函数
- 在Cordova/Phonegap中使用Google API javascript
- 我应该在Google Api javascript中进行什么更改,以便它只能显示印度城市,而不能落后于州和印度
- 如何使用google-api-javascript-client或“Contacts API版本3.0”从gmail导入
- 使用 API javascript 设置 AngularJS 模板
- 通过Twitter API javascript从时间线获取Twitter状态
- 为Google Matrix指定API密钥API Javascript检索用法
- 将HTML文本输入传递给Facebook API javascript调用
- php中的google API javascript代码
- 谷歌地图/地点API JavaScript-无法读取属性'setContent'的未定义
- HUE API JavaScript HTTP PUT请求返回;net::ERR_EMPTY_REPONSE”;
- 循环遍历分页的 API JavaScript
- 将内联 Youtube API JavaScript 代码移动到单独的文件
- 使用 LinkedIn API JavaScript SDK 获取电子邮件地址
- 如何使用Google Sheets API + Javascript更新电子表格
- 访问被拒绝的人 - LinkedIn API Javascript
- Web Audio API - Javascript 创建的 WAV 文件长度不正确且无声