我正在嘗試使用AJAX POST請求提供簡單的下載。用戶點擊<span>
並開始下載(或根據瀏覽器顯示下載對話框)。我已經實現了所有這些,但AJAX響應不會觸發任何瀏覽器下載行爲,我不知道爲什麼。通過AJAX POST下載文件
這裏是我的代碼:
HTML /枝:
<span id="export_csv">csv - click me to download the file</span>
的javascript:
<script type="text/javascript">
$(document).ready(function() {
$('#export_csv').click(function(){
var params = "some params";
$.ajax({
type: 'POST',
url: "{{path('ExportBundle_export', {'format': 'csv','report' : 'basic'})}}",
data: params
});
});
});
</script>
控制器代碼(Symfony2的,但沒關係這裏):
$response = new Response(file_get_contents($document->getPath()));
$response->setStatusCode(200);
$response->headers->set('Content-Type', $document->getMime());
$response->headers->set('Content-Description', 'Submissions Export');
$response->headers->set('Content-Disposition', 'attachment; filename='
. $filename . '.' . $format);
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Pragma', 'no-cache');
$response->headers->set('Expires', '0');
return $response;
這是例子E分別請求:
Request URL:http://myapp.local/app_dev.php/export/basic/csv
Request Method:POST
Status Code:200 OK
和響應頭:
cache-control:private, must-revalidate
Connection:close
content-description:Submissions Export
content-disposition:attachment; filename=report_1363013244.csv
Content-Length:790
content-transfer-encoding:binary
Content-Type:text/csv; charset=UTF-8
Date:Mon, 11 Mar 2013 14:47:24 GMT
expires:0
pragma:no-cache
Server:Apache/2.2.22 (Ubuntu)
x-debug-token:513dee7c99fdb
X-Powered-By:PHP/5.3.10-1ubuntu3.5
我檢查Network
標籤在谷歌瀏覽螢火酷似工具欄和響應長相酷似文件。也許有什麼毛病我的頭,但我檢查了已經經過兩次......
PS 1
我想它使用AJAX來使(我寧願它不是創建一個HTML表單更多)。
PS 2
我在客戶端層(javascript)有很多參數。我需要在控制器(服務器端腳本)中提供所有這些功能。在使用AJAX時,我只是將它們傳遞給data
鍵。
爲什麼不只是'...'? – 2013-03-11 15:05:12