初步涉及脚本,请各位大神给予帮忙。
脚本如下,在执行ajax异步调用后,会到后台执行相关方法,需要时间等待。所以需要延长时间后再进入第二次循环。请问怎么实现?是用setTimeOut吗?又怎么实现?
$('#btnExecute').click(function(){
$('#tbFileList').find(":checkbox:checked").each(function(){
var filename= $(this).parents(".ckc").find('#lblname').text();
var filepath= $(this).parents(".ckc").find('#lblpath').text();
var batpath="d:\2.bat";
$.ajax({
type : "POST",
contentType : "application/json",
url : "fileListServlet?filename=" + filename + "&filepath="
+ filepath + "&batpath=" + batpath + "&action=testcase" ,
dataType : 'json',
success :function(){
}
});
})
});
应该把ajax异步改同步
$.ajax({
type : "POST",
contentType : "application/json",
url : "fileListServlet?filename=" + filename + "&filepath="
+ filepath + "&batpath=" + batpath + "&action=testcase" ,
dataType : 'json',
async : false,//加上这个,变成同步调用
success :function(){
}
});
async: false
ajax加上就不会异步执行了
考虑下转变一下思路,ajax默认情况异步执行,开始调用时告知用户处理中,在回调函数success :function(){ }}方法体内执行调用成功后的代码,并告知处理成功。
当然也可以使用async:false参数改成同步,这两种方法都可以避免使用setTimeout或者setInterval方法提高代码复杂度。
这种建议一次性提交给后台批量处理,而不是批量调用后台;
如果非要这样的话可以用递归的方式,返回后在执行下一个ajax请求
$('#btnExecute').click(function(){
var fileList=$('#tbFileList').find(":checkbox:checked");
doServlet(0);
});
function doServlet(fileIndex){
if(fileIndex<fileList.length){
var filename=fileList[fileIndex].parents(".ckc").find('#lblname').text();
var filepath= fileList[fileIndex].parents(".ckc").find('#lblpath').text();
var batpath="d:\2.bat";
$.ajax({
type : "POST",
contentType : "application/json",
url : "fileListServlet?filename=" + filename + "&filepath="
+ filepath + "&batpath=" + batpath + "&action=testcase" ,
dataType : 'json',
success :function(){
doServlet(++fileIndex);
}
});
}
}
转换思维吧,不要请求那么频繁
那你只需要 把 第2个循环 写在 ajax 的 异步执行的 位置。完成 无刷新时 再执行 第二个循环
那你只需要 把 第2个循环 写在 ajax 的 异步执行的 位置。完成 无刷新时 再执行 第二个循环
朋友给的用setInterval的写法,也贴出来,如有需要,请参考
$('#btnExecute' ).click( function () {
var sleepTime = 2000;
var i = 0;
var arrLength = $( '#tbFileList').find( ":checkbox:checked" ).length;
var interval = setInterval( function () {
var filename = $( '#tbFileList').find( ":checkbox:checked:eq(" + i + ")" ).parents(".ckc" ).find('#lblname' ).text();
var filepath = $( '#tbFileList').find( ":checkbox:checked:eq(" + i + ")" ).parents(".ckc" ).find('#lblpath' ).text();
var batpath = "d:\\2.bat";
$.ajax({
type: "POST",
contentType: "application/json" ,
url: "fileListServlet?filename=" + filename + "&filepath="
+ filepath + "&batpath=" + batpath + "&action=testcase" ,
dataType: 'json',
success: function () {
}
});
i++;
if (i == arrLength) {
clearInterval(interval);
}
}, sleepTime);
});