我正在对生成查询的网站进行AJAX调用,然后将其保存到.txt文件中。
在AJAX完成后应该下载该文件并关闭该下载窗口
Howether IE自动关闭它,然后尝试关闭主窗口,不应该关闭。
同时Chrome只关闭下载窗口,这也是IE应该做的事情。
有解决方法吗?
function start(){
$.ajax({
url: ('query.php'),
type: 'POST',
async:false,
data: {
id: id,
intnr: intnr
},
dataType: "html"
})
.done (function(response) { window.open('download.php'); window.close('download.php'); })
.fail (function(xhr, textStatus, errorThrown) { alert(xhr.responseText); })
;
}
download.php只是:
<?php
header ( 'Content-Type: text/html');
header ( "Content-Disposition: 'attachment'; filename='File.txt'");
include ('/xx/xx/query.txt');
?>
编辑:解决方法,但现在正在运作..
缩短功能
.done (function(response) { var download_window = window.open('download.php'); })
添加到download.php
<script>
var s = navigator.userAgent;
if(s.indexOf("Chrome") > -1 == true)
{
window.open('', '_self', '');
window.close();
}
</script>
答案 0 :(得分:2)
那么:
.done (function(response) {
var download_window = window.open('download.php');
download_window.close();
})
..应该让IE不要关闭任何其他内容。
答案 1 :(得分:1)
这并没有真正回答你的问题,但提供了另一种选择。
在jQuery代码中尝试这样的事情:
.done (function(response) { window.location.href = "download.php"; })
..并在download.php中添加标题以强制下载:
header("Content-Description: File Transfer");
header("Content-Type: application/download");
header("Content-Type: application/force-download");
// Removed this from my code.
// header("Content-Type: application/octet-stream");
// Added this for yours.. not sure exactly what's optimal for your case.
header("Content-Type: text/html");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=File.txt");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
header("Pragma: public");
ob_clean();
flush();
readfile("/xx/xx/query.txt");
在我的项目中,这个php代码在点击提交按钮(表单)后运行,如果我没记错的话,它只显示了一个下载对话框而没有更新地址栏或显示空白页面。
答案 2 :(得分:0)
如果它是弧形窗口,这将起作用
function GetRadWindow() {
var oWindow = null;
if (window.radWindow)
oWindow = window.radWindow;
else if (window.frameElement && window.frameElement.radWindow)
oWindow = window.frameElement.radWindow;
return oWindow;
}
function selfClose(){
GetRadWindow().close();
}