1

在下面的示例变量e中包含从选择框中选择的所有客户端,我在循环中一一迭代它们for并通过 jQuery 的 get 方法传递它们以根据客户端获取值,但for循环在 get 方法结束之前执行并且由于它改变了 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 回答