1

次の例の変数eには、選択ボックスから選択されたすべてのクライアントが含まれています。ループで 1 つずつ繰り返し処理し、forjQuery の get メソッドを介してそれらを渡してクライアントに応じた値を取得していますが、forget メソッドが終了する前にループが実行されています。 val (次の値) の値を変更すること。この問題を解決するには?

var e = document.getElementById("client");
for (var i = 0; i < e.options.length; i++) {
    if (e.options[i].selected) {
        var val = e.options[i].value;
        alert(val); // here it is coming normally

        $('#fund').append('<option value=' + select.options.length + '>---' + val + '----</option>');   
        $.get("listFundsForClient", { client: val }, function(data) {
            alert("2nd:" + val);// here it is taking next value due to for loop iteration
        });
    }
}
4

2 に答える 2

2

これはvalクロージャー変数であるため、次のように書き直すことができます。

$('#client option:selected').each(function(){
    var $this = $(this), val =$this.val();
    alert(val); // here it is coming normally

    $('#fund').append('<option value='+select.options.length+'>---'+val+'----</option>');   
    $.get("listFundsForClient", {client: val}, function(data) {
        alert("2nd:"+val);// here it is taking next value due to for loop iteration
    });
})
于 2013-08-20T10:14:45.720 に答える
1

$.ajax()次のように、同期的に呼び出すために呼び出しを行うことができます。

$.ajax({
  url: myUrl,
  async: false,
  data: myData,
  success: function(data) {
    //stuff
  }
});
于 2013-08-20T10:15:04.937 に答える