从Ajax调用时文件下载脚本不起作用

我正在使用以下脚本来启动文件下载

if (file_exists($newfilename)) {

header('Content-Description: File Transfer');

header('Content-Type: application/octet-stream');

header('Content-Disposition: attachment; filename='.basename($newfilename));

header('Content-Transfer-Encoding: binary');

header('Expires: 0');

header('Cache-Control: must-revalidate');

header('Pragma: public');

header('Content-Length: ' . filesize($newfilename));

ob_clean();

flush();

readfile($newfilename);

exit;

}

当我直接打开页面时,它工作正常,但事实是,我需要从另一个页面通过Ajax调用此脚本。当我这样做时,下载就不会开始。脚本的其余部分执行了预期的工作。

我认为问题不是这种方式可以使用头函数,但是肯定有一种方法可以使这项工作正常进行吗?

如果有帮助,这是Ajax函数:

<script type="text/javascript">

// function create GetXmlHttpObject

function GetXmlHttpObject()

{

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

return new ActiveXObject("Microsoft.XMLHTTP");

}

return null;

}

function submitVideoAjax(){

var myAjaxPostrequest=new GetXmlHttpObject();

var t2_title=document.video_form.title.value;

var parameters="title="+t2_title;

myAjaxPostrequest.open("POST", "newdownloadmanager.php", true);

myAjaxPostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

myAjaxPostrequest.send(parameters);

myAjaxPostrequest.onreadystatechange=function(){

if(myAjaxPostrequest.readyState==4){

if(myAjaxPostrequest.status==200){

document.getElementById("result").innerHTML=myAjaxPostrequest.responseText;

document.getElementById("video_form").style.display = "none";

}

else {

document.getElementById("video_form").innerHTML="An error has occured making the request";

}

}

}

}

</script>

形式如下:

<form name='video_form' id='video_form' method="post">

<input type="hidden" name="title" id="title" value="Madelyn2-01.mp4"/>

<button type="button" name="submit_video" id="submit_video" onclick="submitVideoAjax();">Download</button>

</form>

回答:

您不能使用AJAX下载文件。这没有道理。您可以发送AJAX请求并在客户端上的成功处理程序中获取文件内容,但是出于明显的安全原因,您不能对此做太多事情。您无法将其保存在客户端计算机上,并且没有JavaScript

API可让您提示用户将其保存在何处。

因此,要下载文件,请不要使用AJAX。创建一个指向服务器端脚本的锚点,该脚本提供要下载的文件。

以上是 从Ajax调用时文件下载脚本不起作用 的全部内容, 来源链接: utcz.com/qa/405918.html

回到顶部