日期:2014-05-17  浏览次数:20495 次

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拦截上传文件请求,怎奈技术不精,拦截后上传文件的页面获取不到上传的数据,最后放弃了。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你那样写是不行的,一个是服务端代码,一个是客户端浏览器代码,服务端代码全部执行完了,返回到到客户端,才执行客户端脚本的。可以用js异步去做,比如

//count是总数
function doyourwork(count){
if(count<0)
   return;
$.ajax({
  url:"",//处理请求的连接
  data:{},//参数
  success:funtion(rs){ //回调
    //每处理完一个,就调用自身方法,处理下一个,直到count小于0
    doyourwork(count-1);
  }
});
}


那是说我得先把要处理的人取出来,先将这个值和人员的ID从后台传回前台,然后用js异步调用处理?

看你要解决的问题是什么了,如果说你每处理完一个之后,要在客户端处理一些操作,然后再处理下一条数据,就可以按上面那样做,先将要处理的人都从后台找出来,再一个个处理,否则,为什么不一次性在后台将所有人处理呢?如果说只是为在处理前显示一个“正在处理中”的状态,可以在beforsend事件中显示一个层,然后在完成后将这个层关闭就可以了


过程比较简单,就是先把人取出来,对每一个人调一次A函数,取出来的人都经过了A函数处理后,就OK了。
现在的问题就是A函数比较复杂,可能要执行1秒多钟,如果我一次取出了几十个人,等待的时间太长别人以为是程序挂了。 所以想在前台显示一个类似于progressbar的东西,显示当前执行到谁或是执行到第几个人了。“正在处理中”不太直观,时间一久别人还是会认为程序挂了。  
就用你前面说的方法了,容易实现

那就用上面的方法就可以了,先从后台得到要处理的人,放到个集合里面