Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以进行Ajax调用并使用PHP返回头?_Php_Jquery_Ajax_Http Headers - Fatal编程技术网

是否可以进行Ajax调用并使用PHP返回头?

是否可以进行Ajax调用并使用PHP返回头?,php,jquery,ajax,http-headers,Php,Jquery,Ajax,Http Headers,我有一个PHP脚本,它从MySQL数据库生成一个.CSV导出文件。后端脚本格式化输出并使用header()在浏览器中打开弹出窗口以下载.CSV。-经过测试,效果良好 我还有一个网页,它有一个图形按钮,当您单击图形按钮时,它会启动对服务器的Ajax调用以生成下载.CSV文件 我用JavaScriptalert()测试了click事件,效果很好 我用Ajax调用测试了click事件,但什么也没发生。似乎我需要引导后端脚本的行为有点不同 以前有人做过类似的事情吗 谢谢 *HMTL(节选)* 页面标题

我有一个PHP脚本,它从MySQL数据库生成一个.CSV导出文件。后端脚本格式化输出并使用
header()
在浏览器中打开弹出窗口以下载.CSV。-经过测试,效果良好

我还有一个网页,它有一个图形按钮,当您单击图形按钮时,它会启动对服务器的Ajax调用以生成下载.CSV文件

我用JavaScript
alert()
测试了click事件,效果很好

我用Ajax调用测试了click事件,但什么也没发生。似乎我需要引导后端脚本的行为有点不同

以前有人做过类似的事情吗

谢谢

*HMTL(节选)*


页面标题

...
*JavaScript*


jQuery.support.cors=true;//ajax需要在某些较旧的浏览器和
版本
$(文档).ready(函数(){
$(“#导出按钮”)。单击(函数(){
//警报(“点击按钮”);
$.ajax({
url:“http://mydomain.com/js/ajax/exportCSV.php"
});
});
}); // 完

我试图在不必将用户发送回服务器的情况下完成此功能。我希望用户留在页面上。

您不能从AJAX调用进行下载。最简单的解决方案是将按钮包装在
元素中,让浏览器自然地处理下载。如果您确实需要JS参与,请将
document.location
更改为指向下载PHP,而不是调用AJAX。

您不能通过AJAX调用进行下载。最简单的解决方案是将按钮包装在
元素中,让浏览器自然地处理下载。如果确实需要使用JS,请将
document.location
更改为指向下载PHP,而不是调用AJAX。

您可以通过将
内容类型
头设置为浏览器默认下载的内容(如可执行文件)来强制下载文件。下面是一个执行此操作的PHP脚本的快速示例:

header('Content-disposition: attachment; filename=huge_document.pdf');
header('Content-type: application/pdf');
readfile('huge_document.pdf');
资料来源:


使用此方法,您可以直接链接到PHP脚本并避免JS调用。请注意,强制PDF的
内容类型
将在某些浏览器中强制下载,并在某些浏览器中打开PDF查看器插件。

您可以通过将
内容类型
头设置为默认情况下浏览器将下载的内容(如可执行文件)来强制下载文件。下面是一个执行此操作的PHP脚本的快速示例:

header('Content-disposition: attachment; filename=huge_document.pdf');
header('Content-type: application/pdf');
readfile('huge_document.pdf');
资料来源:



使用此方法,您可以直接链接到PHP脚本并避免JS调用。请注意,强制PDF的
内容类型将强制在某些浏览器中下载,并在某些浏览器中打开PDF查看器插件。

如果要打开新的弹出窗口,为什么要使用ajax调用?(只是有兴趣知道)@Ofirbauch:通过弹出,我想OP是指浏览器的保存对话框。@Amadan…是的,保存对话框window@OfirBaruch .. 我认为我需要走Ajax路线,这样才不会让用户离开页面。在我问我的问题之前,我只是不知道我最终学到了关于保存对话框框架的什么。@Amadan。。。“OP”是什么意思?只是好奇(也许也不知道)。如果你打开一个新的弹出窗口,为什么要使用ajax调用?(只是有兴趣知道)@Ofirbauch:通过弹出,我想OP是指浏览器的保存对话框。@Amadan…是的,保存对话框window@OfirBaruch .. 我认为我需要走Ajax路线,这样才不会让用户离开页面。在我问我的问题之前,我只是不知道我最终学到了关于保存对话框框架的什么。@Amadan。。。“OP”是什么意思?只是好奇(也可能是无知)。谢谢@Amadan。我不想走锚标记路线,因为我希望用户留在页面上。我对JavaScript/jQuery的熟练程度不如PHP。那么,你能帮我看一下
文档。代码行的位置可能是什么样的吗?如果是下载,用户将停留在页面上。好的,@Amadan。也许我想得太多了。我将尝试锚定标签并发回。@Dr.DOT:通过“如果是下载”,我的意思是你正在按照Jasper所示正确设置标题。哦,是的……肯定是想得太多了。你是对的,阿玛丹。锚定标签的行为完全符合我的要求。你每天都会学到新东西(如果你愿意的话)。谢谢@Amadan。我不想走锚标记路线,因为我希望用户留在页面上。我对JavaScript/jQuery的熟练程度不如PHP。那么,你能帮我看一下
文档。代码行的位置可能是什么样的吗?如果是下载,用户将停留在页面上。好的,@Amadan。也许我想得太多了。我将尝试锚定标签并发回。@Dr.DOT:通过“如果是下载”,我的意思是你正在按照Jasper所示正确设置标题。哦,是的……肯定是想得太多了。你是对的,阿玛丹。锚定标签的行为完全符合我的要求。你每天都会学到一些新东西(如果你愿意的话)。你可以使用
application/octet-stream
,强制下载(在正确处理mime类型的浏览器中,而不是通过查找扩展名来伪造mime类型)。谢谢@Jasper。我的“下载”工作正常,因为我之前直接从浏览器地址栏测试过它。我已经有了正确的标题。谢谢。@Dr.DOT使用
应用程序/octet流
作为
内容类型
头的值的主要原因是默认情况下没有浏览器打开可执行文件。因此,如果您使用
application/octet-stream
头文件,大多数浏览器(甚至所有浏览器?)都会强制下载<代码>应用程序/八位字节流
并不意味着一个可执行文件-它意味着一个字节流,没有更多的字节流
header('Content-disposition: attachment; filename=huge_document.pdf');
header('Content-type: application/pdf');
readfile('huge_document.pdf');