Javascript 强制使用ajax和php下载文件

Javascript 强制使用ajax和php下载文件,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我使用图像选择器插件来选择图像,然后强制下载。我努力编写了PHP代码,结果一切正常。下载弹出窗口,我设法查看了文件。我不知道为什么它在AJAX中不起作用。我错过了什么 //get the image-source or URL function getImageSrc() { var req = $("div[class='thumbnail selected']").children('img'); var imagessourc

我使用图像选择器插件来选择图像,然后强制下载。我努力编写了PHP代码,结果一切正常。下载弹出窗口,我设法查看了文件。我不知道为什么它在AJAX中不起作用。我错过了什么

    //get the image-source or URL
    function getImageSrc()
    {
        var req = $("div[class='thumbnail selected']").children('img');
            var imagessource = []; 
                $(req).each(function (datakey, datavalue) {
                                src =  $(datavalue).attr('src'); 
                                        imagessource.push(src);
                                              }); 
                      return(imagessource);
    }
这是我点击按钮的时候

 $("#download_media").click(function() {
                    var file = getImageSrc();    

                    $.ajax({
                        type: 'POST',
                        url: '?page=downloadController&action=downloadMedia',
                        data: {'file_url': file},
                        success: function(data) {
                            console.log("success");
                        }   
                    }); 
                });
我的PHP文件

 public function downloadMediaAction()
 {   
    //get the file_url
    $file = $this->getRequest()->('file_url');

    header("Content-Description: File Transfer"); 
    header("Content-Type: application/octet-stream"); 
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    readfile($file);
}

好的,然后从AJAX请求返回要下载的文档的URL,如下所示:

{'url':'http://server:port/path/to/file.php?id=x“}

然后使用javascript

document.location=http://server:port/path/to/file.php?id=x';

在file.php中调用您的方法:
public function downloadMediaAction()

为了确保浏览器将下载它,请将这一行添加到
downloadMediaAction()


标题(“内容类型:应用程序/强制下载”)

是否希望浏览器显示下载窗口等?然后重定向到那个链接。AJAX并不是为了这个目的。当我尝试使用window.location('ur')时,它只是显示页面。未下载。在发布此问题之前,您是否尝试过搜索?在只花了15秒钟的时间后,我就找到了很多答案来回答您的确切问题:
内容处置:附件应该是您告诉浏览器询问用户如何处理它的全部内容。他正在使用ajax发出请求,所以不,添加标题不起作用。在内容类型上撒谎是个坏主意。我以前在所有主流浏览器中都用过,但现在仍然不起作用。这里的最佳解决方案是什么?@asdasdas请查看我的新答案