Javascript 您是否可以/每次都循环ajax GET请求?
我到处都找过了,我不太明白是否有可能或者如何循环ajax请求,循环数组中的值 因此,它需要将ajax请求作为数组[0]的数据值之一(串行),完成请求,然后使用数组[1]执行下一个请求,依此类推 我的代码:Javascript 您是否可以/每次都循环ajax GET请求?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我到处都找过了,我不太明白是否有可能或者如何循环ajax请求,循环数组中的值 因此,它需要将ajax请求作为数组[0]的数据值之一(串行),完成请求,然后使用数组[1]执行下一个请求,依此类推 我的代码: $.ajax({ url: 'example.com', type: 'GET', data: { message: message, user: user, serial: i }, success:
$.ajax({
url: 'example.com',
type: 'GET',
data: {
message: message,
user: user,
serial: i
},
success: function(response) {
alert("Sent");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Fail");
}
});
这对一个已定义的序列有效,但是当serial(变量'i')是一个数组,包含许多序列时,它如何工作呢?
它也不应该发送数组,它需要循环,一次发送一个值
此时,非常感谢您的帮助。尝试使用forEach()
:
创建一个执行ajax调用的递归函数。当ajax调用结束时,函数调用自身(递归)并传入一个更新的索引值,以便在下一个ajax调用的传入数组中使用
/**
* Recursive function that make an ajax call over the {index} element inside an {array}
* @param {Array} array the array to loop through
* @param {Number} index current index
*/
function Caller(array, index){
if(array.length <= index){return;}
$.ajax({
url: 'example.com',
type: 'GET',
data: {
message: message,
user: user,
serial: array[index]
},
success: function(response) {
alert("Sent");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Fail");
},
complete: function(){
Caller(array,++index);
}
}
/**
*对{array}中的{index}元素进行ajax调用的递归函数
*@param{Array}Array要循环通过的数组
*@param{Number}索引当前索引
*/
函数调用方(数组、索引){
如果(array.length是2018年,那么有多种很好的方法可以做到这一点
- 您可以使用
Promises
,$。ajax
实际返回一个;和async/await
以串行方式执行XHR请求
- 您可以保留回调风格的代码,并使用一个小的实用程序函数以一种可读性好的方式抽象异步迭代,以便反复使用
我将负责这两个案件
带和的异步迭代/
由于jQuery1.5,$.ajax
返回一个承诺
。因此,如果您使用的是现代浏览器,您可以等待它
这是迄今为止最优雅、最简洁的方式,因为代码看起来像同步代码,因此可读性更高。请注意,虽然代码看起来是同步的,但实际上是同步的
const getPosts=async(页面)=>{
const posts=[]
用于(常量页,共页){
const post=wait$.ajax({
网址:'https://jsonplaceholder.typicode.com/posts/“+第页
})
posts.推(post)
}
返回岗位
}
getPosts([1,2,3,4,5])。然后(posts=>{
控制台日志(posts)
}).catch(错误=>{
控制台错误(err)
})
为什么要对每个序列发出多个请求?在一个请求中返回所有需要的请求有什么不对?好吧,什么不起作用?也许你可以发布代码让我们看看?@AhmedSunny这也是一个糟糕的设计,ajax是异步的。@AhmedSunny请不要这样做。除了fac之外“这是不推荐的,也是糟糕的用户体验。”Michael查看回调和/或承诺。下面是另一篇SO帖子,它有一些很好的答案,显示回调和递归,()OP说他需要在执行阵列中的下一个请求之前完成请求。这不就是同时发送每个请求吗?@AndrewLohr是的,它会,同时也可能触发429-在任何合理设计的API上有太多的请求
错误。@NicholasKyriakides再次非常感谢,我理解。你知道模拟的方法吗同步循环。你不需要array.length吗?最好解释一下你的答案为什么/如何工作,这样OP也可以了解和理解你的条件是否正确。关于解释,我认为代码解释如下itself@LPZadkiel非常感谢您的回答,所以数组应该是“i”?我已经试着运行它了它似乎没有运行,不知道为什么,将继续尝试..我编辑了我的解释代码的帖子,我的英语不是很好,我尽了最大的努力我猜是因为我太详细了?很难不加评论就知道出了什么问题。非常感谢你的广泛回答,我会仔细查看,非常感谢你的帮助。
/**
* Recursive function that make an ajax call over the {index} element inside an {array}
* @param {Array} array the array to loop through
* @param {Number} index current index
*/
function Caller(array, index){
if(array.length <= index){return;}
$.ajax({
url: 'example.com',
type: 'GET',
data: {
message: message,
user: user,
serial: array[index]
},
success: function(response) {
alert("Sent");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Fail");
},
complete: function(){
Caller(array,++index);
}
}