我正在尝试使用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