下载一个带有javascript的url文件,然后打开该文件

下载一个带有javascript的url文件,然后打开该文件,javascript,jquery,Javascript,Jquery,我想使用javascript/jquery从服务器下载一个文件 按下按钮时,服务器将响应我要下载的url文件 按钮: <a class="btn btn-primary" id="exportInvoice">Export XML</a> 我正在使用Laravel5.7Blade生成url 当我点击按钮时,文件将打开而不是下载(因为窗口的原因。location=resp.url 我在想…在ajax调用之后(当成功响应时)…设置下载属性和链接的href…但是我需要再次调用

我想使用javascript/jquery从服务器下载一个文件

按下按钮时,服务器将响应我要下载的url文件

按钮:

<a class="btn btn-primary" id="exportInvoice">Export XML</a>
我正在使用Laravel5.7Blade生成url

当我点击按钮时,文件将打开而不是下载(因为窗口的原因。location=resp.url

我在想…在ajax调用之后(当成功响应时)…设置下载属性和链接的href…但是我需要再次调用click事件来下载文件

如何下载打开的文件istead

window.location.href = resp.url
这将在同一页面中开始下载,就像单击除
\u self
之外没有任何目标的链接一样


这将在同一页面中开始下载,就像您单击除
\u self

之外没有任何目标的链接时一样创建隐藏表单以下载文件:

隐藏形式:

<form id="downloadXmlForm" method="post" action="{{ route('download-xml-invoices') }}" style="display: none">
     <input type="hidden" name="xmlFileName">
     <button type="submit" class="btn btn-primary">Export XML</button>
     ({ csrf_field() }}
</form>
在后端,ajax请求的响应为:

...
$fileName = uniqid().'.xml';
$xmlFilePath = storage_path('invoices/'.$fileName);
file_put_contents($xmlFilePath, $xmlString);

return response()->json(['error' => false, 'msg' => $message, 'fileName' => $fileName]);
表单提交时调用的下载功能:

public function downloadInvoicesXml(Request $request){
    return response()->download( storage_path('invoices/'.$request->input('xmlFileName')));
}

如果有人有更好的想法,请告诉我:)

创建隐藏表单以下载文件:

隐藏形式:

<form id="downloadXmlForm" method="post" action="{{ route('download-xml-invoices') }}" style="display: none">
     <input type="hidden" name="xmlFileName">
     <button type="submit" class="btn btn-primary">Export XML</button>
     ({ csrf_field() }}
</form>
在后端,ajax请求的响应为:

...
$fileName = uniqid().'.xml';
$xmlFilePath = storage_path('invoices/'.$fileName);
file_put_contents($xmlFilePath, $xmlString);

return response()->json(['error' => false, 'msg' => $message, 'fileName' => $fileName]);
表单提交时调用的下载功能:

public function downloadInvoicesXml(Request $request){
    return response()->download( storage_path('invoices/'.$request->input('xmlFileName')));
}

如果有人有更好的想法,请告诉我:)

AJAX是一个后台请求,您不能从那里直接触发下载对话框。有一些变通方法,但在这种情况下,一开始不使用AJAX可能更有意义。如果您需要向服务器提交POST数据以生成此下载资源,那么您可以使用JS.thx@misorude提交一个隐藏表单以获取信息;)(使用隐藏表单)AJAX是一个后台请求,您不能从那里直接触发下载对话框。有一些变通方法,但在这种情况下,一开始不使用AJAX可能更有意义。如果您需要向服务器提交POST数据以生成此下载资源,那么您可以使用JS.thx@misorude提交一个隐藏表单以获取信息;)(使用隐藏表单)我已经尝试过…同样的效果(将打开文件)强制下载文件,请确保发送正确的标题:内容处置:附件;filename=“mypdf.pdf”;这将确保文件不会显示在浏览器中,而不会被下载。在“另存为”对话框中将文件名部分替换为您想要的默认文件名。我已经尝试过…同样的效果(将打开文件)要强制下载文件,请确保发送正确的标题:内容处置:附件;filename=“mypdf.pdf”;这将确保文件不会显示在浏览器中,而不会被下载。在“另存为”对话框中将文件名部分替换为默认文件名。