【发布时间】:2013-05-30 15:08:32
【问题描述】:
我正在为一些大型查询编写脚本并避免 php 端超时,加上给用户一些输入,我试图在 jquery 上完成大部分工作。
所以它的工作原理是这样的:首先,用户在选择中选择一条记录。当他点击按钮时,我收到了一个 ajax 调用,以便从 json 格式的记录中获取我需要的详细信息。
有了响应,我得到了一个循环,该循环对第一次调用的每个结果进行 ajax 调用。
如果我将 async 设置为 false,它可以工作,但浏览器会因为有多个 ajax 调用而冻结。那么有没有办法在关闭异步的情况下更新 ui?
我的意思是,当我在循环中进行 ajax 调用时,我需要将 async 设置为 off,这对我来说没有任何意义。它可以同时进行多个调用,我对此很好,但是为什么除非我将 async 设置为 false,否则它不会在该循环中获取当前索引?它继续使用第一个索引。
$("#button_copy").live('click', function(){
$('#button_copy').attr("disabled", true);
id = $('#select').val();
$.ajax({
type: "POST",
url: "query1.php",
dataType: 'json',
async:false,
cache: false,
data: 'id=' + id,
success: function( data ) {
var total1 = data['records'].length;
$("#console").append('Total query 1: ' + total1 + '<br />');
for (var i in data['records']) {
$.ajax({
type: "POST",
url: "query2.php",
dataType: 'json',
async:false,
cache: false,
data: 'id=' + data['records'][i].id,
success: function( data2 ) {
var total2 = data2['records2'].length;
$("#console").append('Total of query 2 from ' + data['records'][i].person + ': ' + total2 + '<br />');
},
error: function(data2) {
console.log(data2);
}
});
var percentprogress1 = (i / total1) * 10000;
$('#progressbar1').css('width',percentprogress1 + '%');
}
},
error: function(data) {
console.log(data);
}
});
});
【问题讨论】:
-
将循环更改为 for(var i=0; i
-
当我这样做时,看起来它甚至没有得到数组上的 [0]。我改为 i=1;
-
你应该只使用一个 ajax 请求来返回所有结果一次
标签: jquery ajax asynchronous