Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $.post in for循环_Javascript_Jquery - Fatal编程技术网

Javascript $.post in for循环

Javascript $.post in for循环,javascript,jquery,Javascript,Jquery,我正在使用循环和$.post在我的网站上填充字段,但这是非常不可靠的,它有时有效有时无效,我不知道问题是什么,如果有人知道问题可能是什么,我将不胜感激 for (var i = 0; i < arrayOfObjects.length; i++) { var object = arrayOfObjects[i]; var option = {}; option['username'] = object.username;

我正在使用循环和$.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);

}
for(变量i=0;i
当您在数组中迭代时,
i
正在递增。由于$.post是异步的,它的成功回调会在循环完成后触发,因此所有成功回调都会在数组的最后一个索引处触发。$。每个都是一种简单的
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);
}

我尝试了Kevin B提供的$.each解决方案,但它仍然无法正常工作,因此我最终将$.post包装到一个函数中,我正在发布我的解决方案,因为它可能会对有相同问题的人有所帮助

      fillfavorite(0); 

      function fillfavorite(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);

          var g = i+1;

          i++;

          if(g<arrayOfObjects.length) { fillfavorite(i);}


        });


      }
fillfavorite(0);
函数(i){
var object=arrayOfObjects[i];
var选项={};
选项['username']=object.username;
选项['COOKIE']=$.COOKIE(“收藏夹”);
选项['INITIAL']='A';
$.post(“/user/favorite.do”,选项,函数(resp){
var obj=$.parseJSON(resp);
$(“#AddFavorite:eq(“+i+”)).html(obj.txt);
var g=i+1;
i++;

如果(grather Inefficient.每个.post调用都是另一个http调用。为什么不将所有这些数据构建到一个结构中,然后执行一个ajax调用将其发送到服务器?您需要关闭
i
的值。调用回调时,
i
的最终值为
arrayOfObjects.length
Yo如果可能的话,你应该考虑用一个AJAX调用来完成所有事情。你是否错过了
$中i的初始化。每个(arrayOfObjects,function(){
?@mcwhittemore是的,谢谢。在非jquery中做得很好
      fillfavorite(0); 

      function fillfavorite(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);

          var g = i+1;

          i++;

          if(g<arrayOfObjects.length) { fillfavorite(i);}


        });


      }