Javascript 暂停循环jQuery问题
我对javascript/jQuery有一个问题……我有一个web服务,它将处理来自客户端列表的信息。我想做的是让客户端逐段发送数据,允许web服务在不过载的情况下完成其工作。我还使用了一个jQueryUIProgressBar,它允许用户查看他们请求的进度 我的问题是,我使用的是for循环,当循环运行时,循环似乎运行到结束,因此,如果有10个数据要处理,那么所有10个同时运行 我想问的是,有没有一种方法可以使for循环暂停,直到从服务器收到成功消息 这就是我所尝试的:Javascript 暂停循环jQuery问题,javascript,jquery,Javascript,Jquery,我对javascript/jQuery有一个问题……我有一个web服务,它将处理来自客户端列表的信息。我想做的是让客户端逐段发送数据,允许web服务在不过载的情况下完成其工作。我还使用了一个jQueryUIProgressBar,它允许用户查看他们请求的进度 我的问题是,我使用的是for循环,当循环运行时,循环似乎运行到结束,因此,如果有10个数据要处理,那么所有10个同时运行 我想问的是,有没有一种方法可以使for循环暂停,直到从服务器收到成功消息 这就是我所尝试的: var nums = [
var nums = [1,2,3,4,5,6,7,8,9,10];
for (var i in nums) {
//I also tried
//for (num = 1; num <= 9; num++) {
//start loop
$("#progressbar").progressbar('option', 'value', num);
var input = {
"num": num,
"total": 100
}
// .progressbar('option', 'value', 37);
var jsonStr = JSON.stringify(input);
//d = '{' + d + '}';
$.ajax({
type: "POST",
url: "AjaxWcf.svc/TestModal",
contentType: "application/json; charset=utf-8",
data: jsonStr,
dataType: "json",
success: function(msg) {
$("#progressbar").progressbar({
value: num
});
//alert(msg.d);
// jQuery('#modalContentTest.loading').fadeOut(200);
// setTimeout('jQuery.modal.close()', 1000);
$("#message").value = msg;
},
error: AjaxFailed
});
}
function AjaxFailed(result) {
alert(result.status + ' ' + result.statusText);
}
});
var nums=[1,2,3,4,5,6,7,8,9,10];
用于(以nums为单位的var i){
//我也试过了
//对于(num=1;num,您需要从回调中递归,以便它调用序列中的下一个(如果存在)
您的问题是AJAX调用是异步的,这意味着行$.AJAX(…)
将立即返回,而无需等待服务器接收请求并发送响应
虽然可以发送同步请求,但千万不要这样做,因为在请求完成之前,它会完全冻结浏览器。(Javascript始终在浏览器的UI线程上运行)
您需要在先前请求的success
回调中发送每个请求
例如:
function sendPart(num) {
$("#progressbar").progressbar('option', 'value', num);
var input = {
num: num,
total: 100
};
var jsonStr = JSON.stringify(input);
$.ajax({
type: "POST",
url: "AjaxWcf.svc/TestModal",
contentType: "application/json; charset=utf-8",
data: jsonStr,
dataType: "json",
success: function(msg) {
$("#message").value = msg;
if (num < 10)
sendPart(num + 1);
},
error: AjaxFailed
});
}
}
sendPart(1);
函数sendPart(num){
$(“#progressbar”).progressbar('option','value',num);
变量输入={
num:num,
总数:100
};
var jsonStr=JSON.stringify(输入);
$.ajax({
类型:“POST”,
url:“AjaxWcf.svc/TestModal”,
contentType:“应用程序/json;字符集=utf-8”,
资料来源:jsonStr,
数据类型:“json”,
成功:功能(msg){
$(“#消息”).value=msg;
如果(数值<10)
sendPart(num+1);
},
错误:ajax失败
});
}
}
第(1)部分;
请注意,如果前一个请求失败,这将不会发送下一个请求。谢谢……我喜欢这两个示例,但如果一个请求失败,我不希望流程停止,因此这一个更适合我。我喜欢你的答案,因为它足够简单,我可以完全理解,我希望你理解我选择了Justin的答案,因为它是更适合我最终的需要。。。
function sendPart(num) {
$("#progressbar").progressbar('option', 'value', num);
var input = {
num: num,
total: 100
};
var jsonStr = JSON.stringify(input);
$.ajax({
type: "POST",
url: "AjaxWcf.svc/TestModal",
contentType: "application/json; charset=utf-8",
data: jsonStr,
dataType: "json",
success: function(msg) {
$("#message").value = msg;
if (num < 10)
sendPart(num + 1);
},
error: AjaxFailed
});
}
}
sendPart(1);