在javascript中,循环是在get方法执行之前执行的

in javascript for loop is executing before the get method executes

本文关键字:执行 方法 javascript 循环 get      更新时间:2023-09-26

在下面的示例中,变量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
        });
    }
}

这是因为这里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
    });
})

您可以使用$.ajax()进行同步调用,如下所示:

$.ajax({
  url: myUrl,
  async: false,
  data: myData,
  success: function(data) {
    //stuff
  }
});