【发布时间】:2014-02-25 18:26:29
【问题描述】:
我想定期检查 php 脚本的状态并将其显示在浏览器上。这是用于发布的jQuery。
$(document).ready(function() {
$("#tempbut").click(function(event){
$('#loader').show();
$('#mainarea').hide('fast');
$.post(
"template.php",
{
guide : $('#guide').val(),
title : $('#title').val()
},
function(data) {
$('#mainarea').empty();
$('#loader').fadeOut('slow');
$('#mainarea').append(data);
$('#mainarea').show('slow');
}
);
});
});
在 PHP 脚本(未发布)中,我回显诸如“构建请求...”、“发送请求...”之类的语句以通知用户进度。如果我不使用 jQuery post,我将能够在每次回显后使用 flush() 和 obflush() 显示状态。也许是因为回调等待脚本完全执行后才输出?
有没有办法修改现有的 jQuery .post 来做到这一点?我看到一些使用 .ajax 的示例,但不是 .post。
如果 .ajax 是执行此操作的唯一方法,我将如何修改此代码?
谢谢!
编辑: 跑起来了!希望有人会觉得这很有帮助。 (可以删除console.log)
test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>TEST</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge;chrome=1" />
<script src="http://code.jquery.com/jquery-2.1.0.js"></script>
<script>
$.ajax({
url: "test.php",
xhrFields: {
onprogress: function(e) {
console.log(e.target.responseText)
$("body").html(e.target.responseText)
if (e.lengthComputable) {
console.log(e.loaded / e.total * 100 + '%');
}
}
},
success: function(text) {
console.log(text)
$("body").html(text+"<h1>done!</h1>")
}
});
</script>
</head>
<body>
<div id="derp">TEST!</div>
</body>
</html>
test.php
<?php
for($i = 0; $i<20 ; $i++){
sleep(1);
echo $i."</br>";
flush();
ob_flush();
}
?>
【问题讨论】: