Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Javascript PHP从POST中创建文件,然后强制用户下载-不起作用_Javascript_Php_Ajax - Fatal编程技术网

Javascript PHP从POST中创建文件,然后强制用户下载-不起作用

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

我有一个包含一些表单和输入字段的页面,用户填写这些表单和字段,然后通过Ajax和$u POST将它们发送到php页面。 然后php文件将输出写入txt文件那很好用。我的问题是,我试图强迫用户在创建文件的同一页面上下载它,在创建文件后,我似乎无法让它工作,除了创建的文件之外,什么也不会发生:

下面是创建.txt文件的代码,这很好:

$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以触发下载…