javascript - 循环内的 Ajax 调用需要顺序响应

标签 javascript jquery ajax queue promise

我需要进行 3 次或更少的 ajax 调用,并且需要按照请求的相同顺序将响应附加到 dom。

我有以下功能,但问题是当我得到的响应附加到 dom 时,它们的顺序不一定正确。

我不想使用 async: false 属性,因为它会阻塞 UI,当然会影响性能。

mod.getArticles = function( ){
    //mod.vars.ajaxCount could start at 0-2
    for( var i = mod.vars.ajaxCount; i < 3; i++ ){
        //mod.vars.pushIds is an array with the ids to be ajaxed in
        var id = mod.vars.pushIds[i];

        $.ajax({
            url: '/ajax/article/' + id + '/',
            type: "GET",
            dataType: 'HTML',
            error: function() {
                console.error('get article ajax error');
            }
        }).done( function( data ) {
            if (data.length) {
                mod.appendArticle( data );
            } else {
                console.error('get article ajax output error');
            }
        });
    }
};

最佳答案

您需要将文章附加到某个位置,例如,基于您拥有的 i 变量。或者您可以等待所有请求,然后按顺序附加它们。像这样:

mod.getArticles = function( ){
    var load = function( id ) {
        return $.ajax({
            url: '/ajax/article/' + id + '/',
            type: "GET",
            dataType: 'HTML',
            error: function() {
                console.error('get article ajax error');
            });
        };
    var onDone = function( data ) {
            if (data.length) {
                mod.appendArticle( data );
            } else {
                console.error('get article ajax output error');
            }
        };
    var requests = [];
    for( var i = mod.vars.ajaxCount; i < 3; i++ ){
        requests.push(load(mod.vars.pushIds[i]));
    }

    $.when.apply(this, requests).done(function() {
        var results = requests.length > 1 ? arguments : [arguments];
        for( var i = 0; i < results.length; i++ ){
            onDone(results[i][0]);
        }
    });
};

关于javascript - 循环内的 Ajax 调用需要顺序响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29858388/

相关文章:

javascript - 使用 Chart.js 在一页中绘制多个图表

javascript - 三.js反向lookAt(camera.position)

javascript - 如何在不刷新页面的情况下使用 JQuery 或 AJAX 调用 PHP 脚本?

javascript - 当链接在新选项卡中打开时如何保留在当前窗口选项卡上

javascript - ajax中的文本框onchange事件返回结果

javascript - 谷歌地图中热图的中值缩小

php - 更改 URL 基本名称

php - 带有 php 和 mysql 的 jQuery flot 不显示图表

javascript - 如何使用 javascript 在 Bootstrap 中预定义下拉按钮?

javascript - jQuery 点击被触发两次