2

ループと $.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);

}
4

2 に答える 2

6

配列を反復処理している間、iは増分しています。$ .postは非同期であるため、ループの終了後に成功コールバックが発生します。したがって、すべての成功コールバックはi、配列の最後のインデックスでトリガーされます。$ .eachは簡単jquery wayに修正できます:

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

});

ただし、これはまだ非常に非効率的な方法です。これらすべてのリクエストを1つのリクエストにまとめる必要があります。

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");
于 2012-10-23T20:04:53.043 に答える
0

KevinBによる$.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);}


        });


      }
于 2012-10-24T00:02:53.710 に答える