2008-09-29 103 views
31

我有以下功能從數據庫中提取數據。 ajax調用工作正常。如何將我的成功功能中的製表符分隔數據發送給用戶?將競爭類型設置爲「application/vnd.ms-excel」不起作用。成功警報顯示格式正確的數據。使用jQuery使用AJAX發送Excel數據

 function SendToExcel() { 
     $.ajax({ 
      type: "GET", 
      url: "/Search.aspx", 
      contentType: "application/vnd.ms-excel", 
      dataType: "text", 
      data: "{id: '" + "asdf" + "'}", 
      success: function(data) { 
       alert(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(jqXHR.responseText); 
     }}); 
    } 

我不想在瀏覽器中顯示數據 - 我想將它發送到Excel。

編輯:我找到了一種方法來做我想做的。我沒有將用戶重定向到提示他們保存/打開Excel文件的新頁面,而是在隱藏的iframe中打開了該頁面。這樣,用戶點擊一個按鈕,並提示他們保存/打開一個Excel文件。沒有頁面重定向。它是Ajax嗎?不,但它解決了我的真正問題。

這裏是我打電話單擊按鈕的功能:

 function SendToExcel() { 
     var dataString = 'type=excel' + 
      '&Number=' + $('#txtNumber').val() + 
      '&Reference=' + $('#txtReference').val() 

     $("#sltCTPick option").each(function (i) { 
      dataString = dataString + '&Columns=' + this.value; 
     }); 

     top.iExcelHelper.location.href = "/Reports/JobSearchResults.aspx?" + dataString;; 
    } 
+2

爲什麼這是一個壞問題的任何理由?爲什麼這會被投票? – Jim 2008-10-13 19:53:20

+0

因爲大多數人都認爲來自AJAX的請求是一種糟糕的方法,但隱藏的iframe可能讓下載對話框出現,所以它得到了Down-vote。儘管每個瀏覽器都會得到不同的結果。我記得IE是有問題的那個。但隱藏的iframe方法的作品 - 我可以證實這一點。 – IEnumerator 2011-01-25 16:28:29

回答

13

AJAX是......錯誤的選擇。將用戶重定向到將使用適當的MIME類型向下發送數據的服務器資源,並讓瀏覽器找出如何處理它。

2

由於它使用JavaScript,因此AJAX受到JavaScript設計的限制的約束,其中包括與客戶機器上的其他進程交互。在這種情況下,這是一件好事;您不希望網站能夠自動加載含有惡意宏的Excel文檔。

如果要在瀏覽器中顯示數據,可以使用AJAX;否則,您只需提供指向Excel文檔的鏈接,並讓瀏覽器的常規下載處理功能找出要執行的操作。

0

有可能你不想用javascript來做到這一點。

我認爲你想要做的是創建一個響應頁面,其類型爲application/csv然後將用戶重定向到該頁面。我可能會做一個window.open(),因爲用戶不會丟失他們當前所在的頁面。

5
在HTML

我有一個串行輸入元素的表單以及調用JavaScript函數onclick="exportExcel();


然後在JavaScript文件按鈕:

function exportExcel(){ 
    var inputs = $("#myForm").serialize(); 
    var url = '/ajaxresponse.php?select=exportExcel&'+inputs; 
    location.href = url; 
} 

最後一個支點文件誰應對什麼

PHP代碼:

case 'exportExcel':{ 
        ob_end_clean(); 
        header("Content-type: application/vnd.ms-excel"); 
        header("Content-Disposition: attachment; 
        filename=exportFile.xls"); 
        echo $html->List($bd->ResultSet($_GET)); 
       } 

$ html是處理html的對象,$ bd是從數據庫返回數據的對象 發送自己的html表或任何你想要的。