当前位置: 首页 > 面试题库 >

jQuery动态AJAX Promise链

宇文弘懿
2023-03-14
问题内容

我的AJAX调用内置于for循环中。它们需要按顺序排列(同步)。如何使用jQuery链接它们?

var array = ['One', 'Two', 'Three'];
var arrayLength = array.length;
for (var arrayCounter = 0; arrayCounter < arrayLength; arrayCounter++) {
    var id = array[arrayCounter];
    getData(id);

    function getData(id) {
        $.ajax({
            url: 'http://example.com/' + id,
            dataType: 'jsonp',
            success: function(d) {
                var response = d;
                console.log(d);
            },
            error: function() {
                alert("ERROR");
            }
        });
    }
}

问题答案:

解决方案使用for

var array = ['One', 'Two', 'Three'];
var id = array[0];
var data = getData(id);
for (var i = 1; i < array.length; i++) {
    // Or only the last "i" will be used
    (function (i) {
        data = data.then(function() {
            return getData(array[i]);
        });
    }(i));
}

// Also, see how better the getData can be.
function getData(id) {
    return $.ajax({
        url: 'http://example.com/' + id,
        dataType: 'jsonp',
    }).done(function(d) {
        var response = d;
        console.log(d);
    }).fail(function() {
        alert('ERROR');
    });
}

顺便说一句,如果您使用了一个适当的Promise库,例如bluebird,则将使用以下代码:

var array = ['One', 'Two', 'Three'];
Promise.reduce(array, function(data, id) {
    return data.promise.then(function(result) {
        return { promise: getData(id), results: data.results.push(result) };
    });
}, []).then(function(data) {
    console.log(data.results); // yay!
});

function getData(id) {
    return Promise.cast($.ajax({
        url: 'http://example.com/' + id,
        dataType: 'jsonp',
    }).done(function(d) {
        var response = d;
        console.log(d);
    }).fail(function() {
        alert('ERROR');
    }));
}

如您所见,读/写方式更容易。



 类似资料:
  • 我使用x-edable来编辑内容。在官方文档中,它说“打开页面,点击元素”。输入新值并提交表单。它将向发送带有新值的ajax请求。 这是我想做的,但是我的url是动态的。我想知道如何生成动态url? 以下是显示内容和可编辑启用的用户界面: 现在当我输入

  • 问题内容: 我有一个非常大的javascript文件,仅当用户单击某个按钮时才想加载。我正在使用jQuery作为框架。有内置的方法或插件可以帮助我做到这一点吗? 更多详细信息:我有一个“添加注释”按钮,该按钮应该加载TinyMCE javascript文件(我已经将所有TinyMCE东西都煮成了一个JS文件),然后调用tinyMCE.init(…)。 我不想在初始页面加载时加载它,因为不是每个人都

  • 本文向大家介绍动态加载jQuery的方法,包括了动态加载jQuery的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了动态加载jQuery的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的jQuery程序设计有所帮助。

  • 我有一些动态创建新div(表单内部的输入)的JS。它工作得很好。我还有一些jquery,它检查下拉输入,如果单击特定的选择,它会显示一个单独的div。它工作得很好。 如果我试图使用jquery在一个动态创建的div中显示一个单独的div,那么它将不起作用。它的第一个实例确实有效,但动态创建的实例都无效。在四处搜索之后,看起来我需要一个代表团,但我似乎无法针对我的具体情况找到它。 JSFIDLE:h

  • 问题内容: 我知道如何使用纯PHP来做到这一点,但是我需要在不重新加载页面的情况下做到这一点。无论如何,jQuery是否可以有效地拉回一些数据库结果(基于用户在表单的第一个文本字段中输入的内容),然后使用从db查询中拉回的数据填充其余的字段? 从本质上讲,我希望用户离开文本字段(通过跳出或单击下一个字段)而离开,然后使用该字段中输入的值提交查询,然后使用w /重新加载页面。 我熟悉jQuery的基

  • 本文向大家介绍Jquery动态替换div内容及动态展示的方法,包括了Jquery动态替换div内容及动态展示的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Jquery动态替换div内容及动态展示的方法。分享给大家供大家参考。具体分析如下: 一、问题: 项目中需要在后台拼接html然后在前台通过ajax展示到div中: 展示后发现,div中直接展示了html字符串内容,并没有解析其中