javascript - $.post 在 for 循环中

标签 javascript jquery

<分区>

我正在使用一个循环和 $.post 来填充我网站上的字段,但是它非常不可靠,它有时有效,有时无效,我不确定问题是什么,如果有人知道问题可能是什么将不胜感激。

for (var i = 0; i < arrayOfObjects.length; i++) {
          var object = arrayOfObjects[i];

            var option = {};
            option['username'] = object.username;
            option['COOKIE'] = $.cookie('Favorites');
            option['INITIAL'] = 'A';


            $.post("/user/favorite.do", option, function (resp) {
              var obj = $.parseJSON(resp);
              $("#AddFavorite:eq("+i+")").html(obj.txt);

}

最佳答案

当您遍历数组时,i 递增。由于 $.post 是异步的,它的成功回调在循环完成后触发,因此所有成功回调都在数组的最后一个索引处用 i 触发。 $.each 将是一种简单的 jquery 方式 来修复它:

$.each(arrayOfObjects,function(i){
      var object = this;

        var option = {};
        option['username'] = object.username;
        option['COOKIE'] = $.cookie('Favorites');
        option['INITIAL'] = 'A';


        $.post("/user/favorite.do", option, function (resp) {
          var obj = $.parseJSON(resp);
          $("#AddFavorite:eq("+i+")").html(obj.txt);
        });

});

然而,这仍然是一种非常低效的方法。您应该将所有这些请求合并为一个请求。

非 jquery 的替代方案是:

for (var i = 0; i < arrayOfObjects.length; i++) {
    (function(i){
      var object = arrayOfObjects[i];

        var option = {};
        option['username'] = object.username;
        option['COOKIE'] = $.cookie('Favorites');
        option['INITIAL'] = 'A';


        $.post("/user/favorite.do", option, function (resp) {
          var obj = $.parseJSON(resp);
          $("#AddFavorite:eq("+i+")").html(obj.txt);
        });
    })(i);
}

此外,您的 $.post 可以简化为:

        $.post("/user/favorite.do", option, function (resp) {
          $("#AddFavorite:eq("+i+")").html(resp.txt);
        },"json");

关于javascript - $.post 在 for 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038304/

相关文章:

javascript - 将 JS var 传递到选择器不起作用

javascript - lodash toNumber 和 parseInt 有什么区别?

javascript - 将嵌套数组转换为对象数组问题

javascript - JSCS:运算符(operator)应坚持以下表达

javascript - 如何使用 Asana 的 JS/Ruby 库连接到 Asana 的 API

javascript - 如何使用 jQuery 计算小计和总计?

javascript - 单击更改鼠标指针并返回释放

javascript - 对远程站点的本地 AJAX 调用在 Safari 中有效,但在其他浏览器中无效

javascript - 当同一页面上有 2 个 vimeo 视频时,plyr/video 不自动播放

javascript - parseInt() 和 parseFloat() 的区别