response.write里的js代码如何事实执行
response.write里的js代码怎么事实执行?protected void test_Click(object sender, EventArgs e){for (int
response.write里的js代码怎么事实执行?
protected void test_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
Response.Write("<script>alert(" + i + ");</script>");
System.Threading.Thread.Sleep(500);
}
}
这段测试代码,我发现是整个循环运行完后,10次alert齐刷刷的出现。怎么才能执行到response的时候,页面就弹出alert,然后才是500毫秒的睡眠,然后继续运行下一次循环?
[解决办法]你那样写是不行的,一个是服务端代码,一个是客户端浏览器代码,服务端代码全部执行完了,返回到到客户端,才执行客户端脚本的。可以用js异步去做,比如
//count是总数
function doyourwork(count){
if(count<0)
return;
$.ajax({
url:"",//处理请求的连接
data:{},//参数
success:funtion(rs){ //回调
//每处理完一个,就调用自身方法,处理下一个,直到count小于0
doyourwork(count-1);
}
});
}
[解决办法]楼主是要在浏览器上显示服务器处理进度吧,给你一个思路:用ajax定时访问一个页面,获取服务器处理进度。
以前我就准备做一个用js显示文件上传进度的东西(不使用其它插件),最后显示进度没问题了,用HttpModule拦截上传文件请求,怎奈技术不精,拦截后上传文件的页面获取不到上传的数据,最后放弃了。
[解决办法]那就用上面的方法就可以了,先从后台得到要处理的人,放到个集合里面
//index是下标,list是从后台得到的用户信息集合
function doyourwork(index,list){
if(index>=list.length){
//结束,可以移除弹出层
return;
}
var user = list[index];
alert('现在正在处理第'+(index+1)+'用户');
$.ajax({
url:"",//处理请求的连接
data:{},//参数
success:funtion(rs){ //回调
//每处理完一个,就调用自身方法,处理下一个,直到count小于0
doyourwork(index+1);
}
});
}