我继承了一个网站的维护/开发。在一些地方,它使用JavaScript/AJAX来显示进度条,而处理发生。我写了自己的脚本提取数据库记录,我想显示进度条,而这发生。
我不明白JavaScript组件是如何工作的。当我使用它时,进度条立即显示100%,但这是在任何处理发生之前。我不知道如何改变这一点,并在处理的各个阶段调用脚本函数。我已经附上了我的PHP脚本和Javascript脚本,所以你可以看到我在做什么。
我的提取过程分为两部分。第一部分显示我的标准网页结构,并简单地要求用户点击提取按钮。当用户点击按钮时,这将调用upload_image脚本,然后“链接”到实际提取目击记录的PHP脚本。
<?php
/* export_sightings.php
Export all sightings records from cbcrecords as CSV file
*/
require_once($_SERVER['DOCUMENT_ROOT'] . '/inc/standard_page_start.php');
?>
<!-- ================================ -->
<!-- ***** MAIN CONTENT START ***** -->
<section class="main-container padding-bottom-clear">
<div class="container">
<div class="row">
<div class="main col-12">
<h3 class="title">Export sightings to CSV</h3>
<div class="separator-2"></div>
<p>Use this tool to extract sightings data to a CSV which will be sent to you by email.</p>
</div>
</div>
<div class="row">
<div class="main col-12">
<form action="src/export_sightings.php"
id="myForm"
name="frmupload"
method="post"
enctype="multipart/form-data">
<input type="submit"
name='startextract'
class="submit-button btn btn-sm btn-default"
value="START EXTRACT"
onclick='upload_image();'/>
</form>
<div class="progress" id="progress_bar">
<div class="bar" id="bar"><p class="text-white text-center">extracting the data...<br><br></p></div>
<div class="percent" id="percent">0%</div>
</div>
<p class="text-danger mt-4"><i class="fa fa-warning"></i> Please wait for the yellow confirmation box to appear below once you have clicked 'START EXTRACT'. Depending upon the number of records to be extracted, this may take a while!</p>
<div class="output_image" id="output_image"></div>
</div>
</div>
</div>
</section>
<!-- ***** MAIN CONTENT END ***** -->
<!-- ================================ -->
<?php include 'inc/standard_page_end.php'; ?>
字符串
下面是JavaScript脚本progress.js
function upload_image()
{
console.log('Hit the progress.js scritpt');
var bar = $('#bar');
var percent = $('#percent');
$('#myForm').ajaxForm({
beforeSubmit: function() {
document.getElementById("progress_bar").style.display="block";
var percentVal = '0%';
bar.width(percentVal)
percent.html(percentVal);
},
uploadProgress: function(event, position, total, percentComplete) {
var percentVal = percentComplete + '%';
bar.width(percentVal)
percent.html(percentVal);
},
success: function() {
var percentVal = '100%';
bar.width(percentVal)
percent.html(percentVal);
console.log(percentVal);
},
complete: function(xhr) {
if(xhr.responseText)
{
document.getElementById("output_image").innerHTML=xhr.responseText;
}
}
});
}
型
在我看来(以我有限的经验),好像我应该能够分别调用uploadProgress和success,但我不知道如何做到这一点。
我详细查看了网站上使用进度条的其他两个部分,但除了核心脚本progress.js之外,我找不到对该函数的任何调用
2条答案
按热度按时间58wvjzkj1#
这些都是匿名函数(ajaxdas),分配给JavaScript对象字面量中的属性,该字面量给(jquery插件?)“ajaxForm”,你不能从这里访问它们作为任何东西,这是ajaxForm函数的工作。
我不知道你的php脚本如何报告进度,但自从5.3天以来我就没有怎么使用PHP了。我猜你需要使用session upload progress让你的web服务器为你处理。
-- addition --
实际上,阅读文档时,我认为这可能不兼容,因为您需要另一个单独的端点来检查会话密钥的进度,而正常的AJAX调用将使用标准的xhr功能在上传期间在客户端提供此信息。
所以你的进度条在技术上可能是正确的,但它只会告诉你上传的情况,而不是后端的处理情况,你不能在PHP中做任何事情来通知客户端。
enxuqcxy2#
似乎你使用了一个名为ajaxForm(https://jquery-form.github.io/form/)的插件
你说的对,uploadProgress是处理进度的关键函数。你需要查阅他们的文档,了解如何在PHP中实现它。