Javascript PHP实时进度条和完成后下载文件到客户端

Javascript PHP实时进度条和完成后下载文件到客户端,javascript,php,ajax,Javascript,Php,Ajax,我计划实现XML站点地图生成,用户将输入URL,而PHP脚本将生成XML文件,PHP脚本将跟踪从最大URL完成的XML生成,例如:一旦达到100 URL,将创建XML文件并提示用户下载该文件 现在,我如何在网页中向用户显示实时进度,一旦完成,XML文件将下载到客户端桌面 $depth=100;-->跟踪完成情况 $map_row = "<url>\n"; $map_row .= "<loc>$url</loc>\n"; if ($enable_frequenc

我计划实现XML站点地图生成,用户将输入URL,而PHP脚本将生成XML文件,PHP脚本将跟踪从最大URL完成的XML生成,例如:一旦达到100 URL,将创建XML文件并提示用户下载该文件

现在,我如何在网页中向用户显示实时进度,一旦完成,XML文件将下载到客户端桌面

$depth=100;-->跟踪完成情况

$map_row = "<url>\n";
$map_row .= "<loc>$url</loc>\n";
if ($enable_frequency) {
    $map_row .= "<changefreq>$freq</changefreq>\n";
}
if ($enable_priority) {
    $map_row .= "<priority>$priority</priority>\n";
}
if ($modified) {
    $map_row .= "   <lastmod>$modified</lastmod>\n";
}
$map_row .= "</url>\n";
fwrite($file_stream, $map_row);
$indexed++;

....
...
....

// Begin by crawling the original url
scan_url($real_site);
// Finalize sitemap
fwrite($file_stream, "</urlset>\n");
fclose($file_stream);
header('Content-disposition: attachment; filename=sitemaptest.xml');
readfile('sitemaptest.xml');
die; //modified code  
$map\u row=“\n”;
$map\U row.=“$url\n”;
如果($enable_frequency){
$map\U row.=“$freq\n”;
}
如果($enable_priority){
$map_行=“$priority\n”;
}
如果($修改){
$map\U row.=“$MODIFED\n”;
}
$map_行=“\n”;
fwrite($file\u stream,$map\u row);
$index++;
....
...
....
//从对原始url进行爬网开始
扫描url($real\u站点);
//最终确定网站地图
fwrite($file_stream,“\n”);
fclose($file\u stream);
标题('Content-disposition:attachment;filename=sitemaptest.xml');
readfile('sitemaptest.xml');
死亡//修改代码
提交表单按钮如下所示:

<form class="form-horizontal" method="post">
<textarea class="form-control" name="url" placeholder="Enter URL to Submit"></textarea>
<br>
<input class="form-control btn btn-warning" type="submit">
</form>



@Timmoton认为这在文件下载的情况下不起作用,因为当它获得这些标题时,浏览器会将响应数据从网页重定向到用户的磁盘上。@ADyson我很久很久没有做进度条了。。。但我倾向于同意你的看法。我没有把这个问题读透。进度条可能只适用于计算部分,如果可能的话,您必须重定向以发布另一个头文件下载给用户。值得这么麻烦吗?对我来说不是;我会在页面上加载一个gif,直到它完成…@TimMorton,即使这样,我想你还是需要AJAX来处理第一个请求。否则,由于响应重定向到磁盘上,页面将无法知道请求何时完成并再次隐藏gif。我认为需要这样做:AJAX请求开始处理和生成文件,文件保存到磁盘,服务器返回指向新文档的链接。JS在AJAX响应中接收链接,并对该链接进行客户端导航(例如,使用
location.href
)以触发下载。是的,在AJAX请求期间加载gif动画。