Javascript 您是否可以/每次都循环ajax GET请求?

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请求,循环数组中的值

因此,它需要将ajax请求作为数组[0]的数据值之一(串行),完成请求,然后使用数组[1]执行下一个请求,依此类推

我的代码:

$.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);
        }
    }