簡體   English   中英

使用AJAX進行線程化

[英]Threading using AJAX

當用戶單擊鏈接以生成報告時,我進行了AJAX調用,該調用會在后台生成pdf文件,現在這些文件很大,運行速度高達10mb或更多,因此需要一些時間,與此同時,用戶應該能夠導航其他鏈接,好像什么都沒發生。所以我需要以這樣的方式實現:pdf生成過程開始並且用戶不必等待該過程完成。這可能嗎? C#與點網框架2.0

這里的問題是,一旦AJAX活動開始,瀏覽器就會進入掛起狀態,並且用戶必須等待,盡管他單擊了其他鏈接。

我可能會為用戶創建一個“隊列”或“收件箱” ...

使用ThreadPool.QueueUserWorkItem啟動pdf生成例程(您還需要修改生成方法以輸出到其收件箱)

然后在每個http請求上檢查收件箱並通知用戶該項目...您始終可以按一定間隔或類似方式輪詢服務器

可以,但是一旦用戶導航到另一個頁面,等待Ajax響應的Javascript不再運行,因此該請求將丟失。 您將必須找到一種方法來保持該頁面的打開狀態(使用框架或僅使用Ajaxified導航),或者找到一種方法來存儲響應並在下一個頁面視圖中將其完成通知用戶。 例如,存儲指示該操作已完成的會話變量,或將其存儲在(可能)“未讀”布爾值的數據庫中。

您可以進行異步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.');
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM