Javascript PHP从POST中创建文件,然后强制用户下载-不起作用
我有一个包含一些表单和输入字段的页面,用户填写这些表单和字段,然后通过Ajax和$u POST将它们发送到php页面。 然后php文件将输出写入txt文件那很好用。我的问题是,我试图强迫用户在创建文件的同一页面上下载它,在创建文件后,我似乎无法让它工作,除了创建的文件之外,什么也不会发生: 下面是创建.txt文件的代码,这很好:Javascript PHP从POST中创建文件,然后强制用户下载-不起作用,javascript,php,ajax,Javascript,Php,Ajax,我有一个包含一些表单和输入字段的页面,用户填写这些表单和字段,然后通过Ajax和$u POST将它们发送到php页面。 然后php文件将输出写入txt文件那很好用。我的问题是,我试图强迫用户在创建文件的同一页面上下载它,在创建文件后,我似乎无法让它工作,除了创建的文件之外,什么也不会发生: 下面是创建.txt文件的代码,这很好: $myfile = fopen("test.txt", "w") or die("Unable to open file!"); foreach ($URLsArra
$myfile = fopen("test.txt", "w") or die("Unable to open file!");
foreach ($URLsArray as &$url) {
$row=$SomeArray[$keys[$index]]."\t".$SomeArray[$keys[$index]]."\t".$SomeArray[$keys[$index]]."\t".$SomeArray[$keys[$index]]."\t".$url."\n";
fwrite($myfile, $zeile);
$index = $index + 1;
}
fclose($myfile);
这里是我试图强制下载的代码:在fclose之后
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename('test.txt'));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('test.txt'));
readfile('test.txt');
exit;
当我尝试这样做时,我得到了一个错误:意外标记A.A是test.txt中的第一个字母,它是创建的
我知道有很多类似的问题,但没有一个解决方案适合我
我希望有人能帮助我:不要用PHP做后端,你可以试着在前端部分做。最简单的解决方案是编写一些JavaScript代码,将iframe添加到网页中。iframe应该有一个指向您希望用户下载的文件的href 好的,这里是我的解决方案:@CBroe感谢后台请求的提示,我会尝试很久才能在php文件中获得下载工作。所以我所做的是: 在PHP中:我在创建.txt文件后回显文件名:
echo json_encode(array('filename' => "your_Data".time().".txt"));
而在JavaScript中,我在success方法中读取文件名,并将链接放入元素中。稍后,该按钮将被设置为激活状态
success : function(data) {
$("#button_get_file_download").attr("href", "urlToFolder"+data.filename);
},
AJAX意味着后台请求,您不能通过服务器响应直接从那里触发下载对话框。最简单的解决方案:不要使用AJAX,而是提交一个普通表单。您可以下载AJAX响应,这不是通过php设置完成的,而是通过客户端JS完成的。您可以将我的下载库用作ajax回调:@CBroe:谢谢您的评论:但我需要ajax,因为我发布到PHP文件的数据是数组,我根据用户提供的输入创建数组。或者我可以用普通格式发送数组吗?@dandavis:好吧,这看起来很有趣,所以我所要做的就是通过ajax成功方法获取创建的txt文件的文件名,然后用返回的文件名调用下载方法?因为这可能是一个相当小的数据量,所以您可能不需要AJAX或PHP–但是您可以简单地在客户端以所需的格式组装数据,然后从中创建一个数据URI,并将其分配给location.href以触发下载…