下载文件并通过 ajax 将其重定向到另一个页面
Posted
技术标签:
【中文标题】下载文件并通过 ajax 将其重定向到另一个页面【英文标题】:Download a file and redirect it to another page via ajax 【发布时间】:2017-01-01 13:32:11 【问题描述】:我有一个用于下载 excel 文件的简单联系表。主要问题发生了,当 ajax 加载时。我想下载 excel 文件然后将用户重定向到下一页。下面是我的带有虚拟数据的代码。
Ajax 代码..
$.ajax(
type: "POST",
url: "/site/ajaxexcel.php",
data: 'value':'send',
cache: false,
success: function(html)
location.href = '<?php echo base_url()."/site/welcome.php" ?>';
);
而我的ajaxexcel.php
代码是:
<?php
$content= '<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<!--[if gte mso 9]>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Sheet 1</x:Name>
<x:WorksheetOptions>
<x:Print>
<x:ValidPrinterInfo/>
</x:Print>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
<![endif]-->
</head>
<body><table class="table table-condensed table-striped table-hover table-bordered pull-left" id="myTable"><thead><tr><th>Rakesh</th><th>kumar</th></tr></thead><tbody><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr><tr><th>Rakesh</th><th>Rakesh</th></tr></tbody></table></body></html>';
header('Content-type: application/excel');
header('Content-type: image/jpeg,image/gif,image/png');
header("Content-Disposition: attachment; filename=download.xls");
header("Pragma: ");
header("Cache-Control: ");
echo $content;
?>
我只想下载 excel 文件,然后将用户重定向到特定位置。
如果你做得正确,你也可以帮助我处理你的 codeigniter 代码..
【问题讨论】:
我认为这个链接***.com/questions/4545311/…会对你有所帮助 感谢您的评论。实际上,他们这样说,使用外部js文件。但是我的 ajax 代码很简单,也很简单。所以请在我的代码中帮助我。@user1048123_SOreadytohelp @KumarRakesh 你能把你的项目文件夹添加到我们可以下载的地方吗? Cz 我需要更多信息来帮助你 @KumarRakesh 有什么更新吗?? @Spartan .. 抱歉更新晚了.. 作为我的问题.. 我只有两个文件.. 我已经用另一种方式修复它.. 但这还不够我的答案.. 如果你可以做到 。请尝试使用我的代码.. 【参考方案1】:试试下面的方法,希望能成功
-
通过
window.open
在新窗口中打开ajaxexcel.php
它将开始下载,然后关闭它。
关闭后立即重定向页面。
【讨论】:
感谢@shaymmakwana.me 的回答 .. 但这对我来说还不够和正确的答案。就像您可以看到我的代码一样。它们已经用于下载文件的标头。所以不能在这个文件中使用 header:location code .. 我想你误解了,你需要在你打开ajaxexcel.php
的父窗口(而不是ajaxexcel.php)中编写重定向代码。我建议尝试一次然后返回。
好的,让我再检查一次。非常感谢您的快速回复。
我以我的方式尝试您的代码。我认为,我无法完全管理它。请您为我编写代码。提前致谢【参考方案2】:
我认为下载起来非常困难。请使用 PHP Excel 创建文件并下载。
【讨论】:
哦耶..听起来不错..谢谢我已经尝试过了。但主要问题是重定向。下载代码后标题操作不起作用。 请在 PhpExcel 中使用这个 $name="file.xlsx"; $objWriter->save('文件夹名/'.$name); $path="文件夹名/file.xlsx"; header("位置:$path"); 我明白你的意思。它对我来说不能正常工作..而且我想用 ajax @vijju Pundir 来完成它 我不同意这一点,使用 php excel 我们可以创建和下载文件,过程非常简单。【参考方案3】:您无法使用 Ajax 请求下载文件。您必须如何重定向到允许您下载文件的特定位置。您可能会尝试这样做,但尝试在单独的选项卡中下载文件并将您的页面重定向到特定页面。
<input id="btnGetResponse" type="button" value="Redirect" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function ()
$("#btnGetResponse").click(function ()
window.open('/test/excel.php');
window.location = "http://***.com/";
);
);
</script>
也从您的 PHP 文件 (excel.php) 中删除此行。否则,它会将您的文件下载为 JPG 或 PNG
header('Content-type: image/jpeg,image/gif,image/png');
【讨论】:
我无法得到答案。它给了我一种解决方案。根据我的要求,它对我来说并不完美【参考方案4】:通过使用https://github.com/johnculviner/jquery.fileDownloadjs:
$.ajax(
type: "POST",
url: "/site/ajaxexcel.php",
data: 'value':'send',
cache: false,
success: function(html)
$.fileDownload("ajaxheader.php",
successCallback: function (url)
location.href = '<?php echo base_url()."/site/welcome.php" ?>';
,
failCallback: function (responseHtml, url)
alert('error');
);
);
并在 php 端在标题中添加以下行:
header("Set-Cookie: fileDownload=true; path=/");
【讨论】:
非常感谢您的回答.. 我得到了您的回答.. 在这种情况下,我的文件没有下载,只有位置 href 工作【参考方案5】:您可以为此使用jquery.fileDownload.js
。
你可以在这里找到一个例子。 . . http://www.codeasearch.com/working-with-jquery-filedownload-js-plugin.html
【讨论】:
没有完整的描述。我已经使用了他们的代码但没有得到具体的结果。请给我一个写的代码。而且我还想将用户重定向到另一个页面@Ravikiran kalal。【参考方案6】:实际上,对于这种情况,我建议使用空白选项打开文件位置并重定向。为此,您需要创建一个表单结构并将其提交到您的 action.php
例子:
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "action.php");
form.setAttribute("target", "myView");
// or you can use _blank : form.setAttribute("target", "_blank");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "message");
hiddenField.setAttribute("value", "val");
form.appendChild(hiddenField);
document.body.appendChild(form);
window.open('', 'myView');
form.submit();
alert("Redirect in 10 second!");
setTimeout(function()
location.href = "/home"
, 10000);
【讨论】:
setTimeout 不是完美的方式。我认为,10 秒,或多或少都不是正确的方式,亲爱的。【参考方案7】:通过使用https://github.com/johnculviner/jquery.fileDownload
也从您的 PHP 文件 (excel.php) 中删除此行。否则,它会将您的文件下载为 JPG 或 PNG
header('内容类型:image/jpeg,image/gif,image/png');
【讨论】:
就像 Ish 回答一样。你能帮我写下你的完整代码吗?【参考方案8】:您可以通过创建虚拟表单并发布它来实现这一点。
function autoGenerateAndSubmitForm(method, url, post_data)
var element = document.getElementById("virtual_form");
if(element != null )
element.parentNode.removeChild(element);
var form = document.createElement("form");
form.setAttribute("id", "virtual_form");
form.setAttribute("style", "display:none;");
form.setAttribute("target", "_blank"); // This line is very important in your case for redirect in other page and download your file.
form.method = method;
form.action = url;
for(i in post_data)
var element=document.createElement("input");
element.value=post_data[i];
element.name=i;
form.appendChild(element);
document.body.appendChild(form);
form.submit();
form.parentNode.removeChild(form);
在你需要的地方调用上面的方法,我假设你已经在点击事件中调用它
$('button').on('click', function(e)
autoGenerateAndSubmitForm("POST","/site/ajaxexcel.php",'value':'send');
location.href = '<?php echo base_url()."/site/welcome.php" ?>';
);
从您的服务器端代码中删除以下行。
header('Content-type: image/jpeg,image/gif,image/png');
【讨论】:
感谢您的回复。我已经使用了您的代码但是在控制台中发生了很多错误,例如阻止网址等。 这对我有用……奇怪的是不适合你……而且会阻止 url?你在使用 SSL 证书吗?【参考方案9】:在 Ajax 中....您可以在服务器上创建一个 excel 文件...ajax 响应将是 excel 文件的路径...在 ajax 成功时在新选项卡中打开 excel 文件(它会自动下载 excel)同时打开带有新位置的新标签。
下面给出的ajax成功示例代码
window.open("path to excel..");
window.open("new location");
也可以使用(如果需要)
window.location.replace("new location");
Open multiple links in Chrome at once as new tabs
【讨论】:
【参考方案10】:方法一:使用jQuery AJAX
用下面的代码替换你的ajax..
<script>
$.ajax(
type: "POST",
url: "/site/ajaxexcel.php",
data: 'value':'send',
cache: false,
success: function(html)
window.open("/site/ajaxexcel.php");
location.href = '<?php echo base_url()."/site/welcome.php" ?>';
);
</script>
window.open
将在单独的窗口中打开 ajaxexcel.php 文件,location.href
将重定向到给定的welcome.php 文件。这是最好的方法。
方法2:使用jQuery文件下载插件
只包括 jqueryfiledownload script 并执行以下操作:
<a class="download" href="/path/to/file">Download</a>
<script>
$(document).on("click", "a.download", function ()
$.fileDownload($(this).prop('href'))
.done(function () alert('File download a success!'); //success code)
.fail(function () alert('File download failed!');//failure code );
return false; //this is critical to stop the click event which will trigger a normal file download
);
</script>
现在,当您单击锚点时,您的文件将被下载,您可以分别在 done()/fail()
函数中编写成功/失败代码。
【讨论】:
就像Milan malani answer一样,我已经尝试过这种代码。但主要问题是文件下载在新窗口中打开 hii @KumarRakesh ,我同意文件下载将在新窗口中打开,但新窗口将自动关闭并立即出现下载对话框,您将重定向到另一个页面.. 还有一件事,亲爱的,它在 Chrome 和 Safari 中不起作用。【参考方案11】:只需使用简单的 javascript
window.location.replace(###file url###);
【讨论】:
【参考方案12】:1) Ajax 不是解决方案。
2) window.open()
弹出窗口将在大多数浏览器中被阻止,即使来自同一域(至少前段时间在 chrome 和 FF 中发生这种情况,当时我试图实现类似的东西)
这样的事情可以完成这项工作:(它不会检查返回的代码之类的东西,所以404
或非文件输出将导致重定向而不下载)
document.getElementById('zzz').onclick = function()
ifrm = document.createElement('iframe');
ifrm.style.display = "none";
ifrm.src = "https://github.com/SheetJS/test_files/blob/b07031a7bd5a8b86b9baac94267f20cf81c6d5eb/A4X_2013.xls?raw=true";
// some random xls file from github (it contains just a single "x" character in cell A-4)
ifrm.onload = function()
window.location.href = "https://jquery.com";
;
document.body.appendChild(ifrm);
return false;
<a href="#" id="zzz">
click me
</a>
P.S.:对于某些文件类型(如 pdf),您需要 application/octet-stream
Content-type
标头来强制浏览器下载文件而不是使用内置查看器。
【讨论】:
以上是关于下载文件并通过 ajax 将其重定向到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章