我有一个使用webapp2框架与MySQL数据库交互的Google App Engine应用程序。应用程序的用户可以上传数据。在上传过程中,我想显示进度条,因为这可能需要几分钟时间。
根据我在其他主题中看到的(主要是:这个主题和这个主题),我正在研究JSON/Javascript解决方案,这对我来说都是新的。
如果我传递一个随机数,进度条本身就可以工作。但是,我无法弄清楚如何从Python脚本中“加载”变化的值。
以下是HTML/CSS/Javascript代码:
如何修改脚本使其工作?或者有更好的解决方法吗?
根据我在其他主题中看到的(主要是:这个主题和这个主题),我正在研究JSON/Javascript解决方案,这对我来说都是新的。
如果我传递一个随机数,进度条本身就可以工作。但是,我无法弄清楚如何从Python脚本中“加载”变化的值。
以下是HTML/CSS/Javascript代码:
HTML:
<div id="myProgress">
<div id="myBar"</div>
</div>
CSS:
#myProgress {width: 300px;
height: 30px;
background-color: #ddd;
}
#myBar {width: 1%;
height: 30px;
background-color: #4CAF50;
}
Javascript:
<script type="text/javascript">
function move() {
var elem = document.getElementById("myBar");
var width = 1;
var id = setInterval(frame, 1000);
function frame() {
if (width >= 100) {
clearInterval(id);
}
else {
//var randomnumber = Math.floor(Math.random() * 100); --> works
var randomnumber = function update_values() {
$SCRIPT_ROOT = {{ script_root }};
$.getJSON($SCRIPT_ROOT+"/uploading",
function(data) {
$("#width").text(data.width+" %")
});
} ; --> this is wrong I assume
var width = randomnumber;
elem.style.width = width + '%';
}
}
}
window.onload=move();
</script>
进度条的进度是由嵌入在加载页面脚本中的Python for循环控制的。当脚本完成一个活动后,我希望计数器的结果能够传递给进度条作为其宽度。对于静态变量,我使用常规的Jinja方式。
class UploadingpageHandler(webapp2.RequestHandler):
def get(self):
activities_list = [1,2,3,4,5,6,7,8,9,10]
counter = 0
script_root = 'localhost:10080'
for activity in activities_list:
counter = counter + 10
upload.do_stuff_in_some_function_with_MySQL()
obj = {
'width': counter
}
self.response.headers['Content-Type'] = 'application/json' --> this
self.response.out.write(json.dumps(obj)) --> and this is wrong I assume
template_vars = {
'script_root': script_root
}
template = jinja_environment.get_template('uploading.html')
self.response.out.write(template.render(template_vars))
如何修改脚本使其工作?或者有更好的解决方法吗?
runprogress(event)
将计算0-100的进程,因此,如果您添加console.log(percent),您将看到它记录0到100。uploadcomplete(event)
将在上传完成后执行,因此您可以使用它来设置状态消息并清除/重置进度条。至于对ajax post的更改,您应该能够将upload.php
更改为要使用的服务器端文件。 - NewToJSPOST
和GET
方法都应该是一样的,它将在原地计算ajax调用的进度。 - NewToJS