【发布时间】:2014-01-20 18:07:13
【问题描述】:
我创建了一个 for 循环,用于循环一个元素在容器中出现的次数。 for 循环从 HTML 中获取一些数据并创建一个 JSON url,然后返回一个值。然后应该将该值添加到 HTML 的适当位置。
问题似乎是 for 循环在所有 Ajax 调用之前完成,因此只有最后一个值被添加到 HTML。我认为我可以确保 readystate 等于 4,但该解决方案不起作用。我还尝试使用完整的,而不是成功的 Ajax 事件。有什么见解吗?这是我的代码。
for(var index = 0; index < $('#wizSteps #step6 label').length; index++){
var priceCount;
console.log(index);
var currentSelect = $('#wizSteps #step6 label[data-pricepos="'+index+'"]');
url = 'http://www.thesite.com/api/search.json?taxonomy=cat3435' + currentSelect.find('input').attr('name');
jQuery.ajax({
url: url,
dataType: "JSON",
success: function( data ){
var totalResult = data.totalNumberOfResults;
console.log(currentSelect);
currentSelect.find('.itemCount').text(totalResult);
}
});
}
【问题讨论】:
-
Ajax 是异步的。您按顺序启动它们,但它们将在稍后完成,可能以不同的顺序。
-
关于
currentSelect:Javascript closure inside loops - simple practical example -
您是否尝试在
url: url,之前将async: false,添加到您的 AJAX 选项中? -
@MonkeyZeus 我不知道他有没有,但我知道他不应该。
-
async: false肯定会解决问题,但它会在请求期间锁定浏览器,使您的页面看起来很糟糕。 在这种情况下不要使用async: false。
标签: javascript jquery ajax