当用户点击链接生成报告时,我做了一个AJAX调用,在后台生成一个pdf文件。现在这些文件运行速度高达10mb或更多。所以需要一些时间。同时用户应该能够导航其他链接,好像什么也没发生过。所以我需要以这样的方式实现pdf生成过程开始&用户不必等待进程完成。这可能吗?我正在使用带有dot net framework 2.0的c#的AJAX Pro
这里的问题是,一旦AJAX活动开始,浏览器就会进入一个挂起的阶段&用户必须等待,尽管他点击了其他链接。
答案 0 :(得分:2)
我可能会为用户创建一个“队列”或“收件箱”......
使用ThreadPool.QueueUserWorkItem启动您的pdf生成例程(您还需要修改生成方法以输出到其收件箱)
然后在每个http请求上检查收件箱并通知用户该项目...您可以随时轮询服务器间隔或某事
答案 1 :(得分:0)
当然,但是一旦用户导航到另一个页面,等待Ajax响应的Javascript就不再运行,因此请求丢失。您必须找到一种方法来保持该页面打开(使用框架或仅使用Ajaxified导航),或者找到一种方法来存储响应并在下一页面视图中通知用户其完成。例如,存储指示操作已完成的会话变量,或将其存储在具有(可能)“未读”布尔值的数据库中。
答案 2 :(得分:0)
您可以进行异步Ajax调用,以便在响应对象从Ajax页面返回时执行其他任务。 下面是一些示例,testAjax.aspx是Ajax页面:
http_request.onreadystatechange = function() { alertContents(http_request); };
http_request.open('GET', 'testAjax.aspx?', true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send(null);
function alertContents(http_request)
{//debugger;
if (http_request.readyState == 4)
{
if (http_request.status == 200)
{
var vResult;
vResult=http_request.responseText;
//Write your logic after successful Ajax call here.
}
else
{
alert('There was a problem with the request.');
}
}
}