0

以下の構文は 100% 正しく機能し、対応するチェックボックスを設定します。

for (var i = 1; i < 30; i++) {     
$.post('get_sku_prices', {data: $('#product'+i).val()},function(result) {
    $('#price'+i).val(result);
    $('#adjustedprice'+i).val(result);
});
alert(i);
}

前述のとおり、正しく動作しています。アラートを削除して、

for (var i = 1; i < 30; i++) {   
$.post('get_sku_prices', {data: $('#product'+i).val()},function(result) {
    $('#price'+i).val(result);
    $('#adjustedprice'+i).val(result);
});

}

アラートがページを強制的に更新するように、フィールドはアラートなしでは入力されません。

何か案は?前もって感謝します...

4

4 に答える 4

2

これは、最初のケースでalert()は がブロックされており、ループを続行するには破棄する必要があるためです。

2 番目のケース (アラートなし) では、応答を待たずに ajax 呼び出しがすぐに実行されます。つまり、最初のリクエストに対するレスポンスがいつ(i=1)到着するiかは、必ずしも ではありません1

$.ajaxとそのcontextオプションを使用して修正できます。

例えば:

for (var i = 1; i < 30; i++) {     
    $.ajax({
        type: 'POST',
        url: 'get_sku_prices',
        data: {data: $('#product'+i).val()},
        context: {index: i}, // this value will be available in success as "this"
        success: function(result) {
            $('#price'+this.index).val(result); // use "this.index" here
            $('#adjustedprice'+this.index).val(result);
        }
    });
}
于 2013-04-24T15:21:12.517 に答える
1

次のような独自のスコープ関数を作成できます。

for (var i = 1; i < 30; i++) {
    (function (index) {
        $.post('get_sku_prices', {
            data: $('#product' + index).val()
        }, function (result) {
            $('#price' + index).val(result);
            $('#adjustedprice' + index).val(result);
        });
    })(i)
}
于 2013-04-24T15:32:07.137 に答える
0

関数の実行に遅延を追加してみてください

var i=0;
function postRequest(i){
$.post('get_sku_prices', {data: $('#product'+i).val()},function(result) {
    $('#price'+i).val(result);
    $('#adjustedprice'+i).val(result);
});
setTimeout(function(){
    postRequest(i++);
},1000);
}
于 2013-04-24T15:29:32.923 に答える
0

Count をサーバーに送信し、結果のカウントを取得して、for ループからのカウントではなく、結果から受け取ったカウントに従って変更を行います。

于 2013-04-24T15:26:57.523 に答える