2011-05-15 27 views
2

我有一個簡單的頁面按鈕,它通過JavaScript調用HttpHandler。從javascript中調用HttpHandler

HttpHandler獲取大量文件並將它們添加到一個zip文件,完成工作後,zip文件將被添加到Response。

此操作可能需要幾分鐘的時間。我想在完成HttpHandler的工作後執行一些JavaScript函數。

我該怎麼辦?

我的代碼:

<asp:Button ID="btnDownload" runat=server Text="Download" OnClientClick="Download()" /> 

<script type="text/javascript"> 
    function Download() 
    { 
     var url = 'FileStorage.ashx'; 
     window.open(url);    
    } 
</script> 

UPD 1:

我已經找到其他的解決辦法。使用XMLHttpRequest。

代碼:

<script type="text/javascript"> 
     var xmlHttpReq = createXMLHttpRequest(); 

     function Download() { 
      var url = 'FileStorage.ashx';    
     xmlHttpReq.open("GET", url, false); 
     xmlHttpReq.onreadystatechange = onResponse; 
     xmlHttpReq.send(null);   
    } 

    function onResponse() { 
     if (xmlHttpReq.readyState != 4) 
     { return; }   
     var serverResponse = xmlHttpReq.responseText; 
     alert(serverResponse);   
    } 

    function createXMLHttpRequest() { 
     try { return new XMLHttpRequest(); } catch (e) { } 
     try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { } 
     try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } 
     alert("XMLHttpRequest not supported"); 
     return null; 
    } 
    </script> 

在onResponse()我可以看到的responseText(二進制)我的zip文件。但我對瀏覽器如何下載文件等工作的httphandler的結果並不知情。

任何想法?

回答

4

我會使用JQuery AJAX,然後在成功時編寫一個函數,該函數將執行您需要的任何工作。再加上AJAX,你可以向用戶顯示一個圖標,說明加載,以便他們知道某些東西實際上正在處理中,而不是頁面掛起而沒有任何事情發生。

$.ajax({ 
    url: "FileStorage.ashx", 
    context: document.body, 
    success: function(){ 
    // Whatever you want to do here in javascript. 
    } 
}); 
+0

謝謝,但我不能使用JQuery,我需要其他解決方案 – Ukraine 2011-05-15 12:35:07

+1

不知道我可以幫忙。您顯然需要知道處理程序何時完成執行,也許輪詢目錄中zip文件的計時器。一旦完成並找到文件,運行一個函數。雖然這看起來不對。抱歉。 – Dietpixel 2011-05-15 12:39:27