我对网络编程很陌生,所以请耐心等待。
我创建了一个将表单数据提交给PHP exec()函数的网页。此功能从网站请求数据(一次或多次),以各种方式操作它,并将其粘贴在我的Web服务器上的文件中。处理时,网页上会出现一个加载器.gif文件。我创建了一段JavaScript代码来处理进程等待期,但我不确定我做得对。脚本如下:
<script>
window.set = 0;
window.uid = '';
document.forms[0].onsubmit = function(e)
{
console.log($(this).serialize());
e.preventDefault();
e.stopPropagation();
// Display "Waiting" .gif during processing
$('#loader').show();
// Perform data submission once (when window.set = 0). After that,
// keep waiting for output and manifest file to be created. Call
// "fetch" function repeatedly to test for completion. When completed,
// call clearInterval to stop processing.
window.int_ = setInterval(function()
{
$.ajax({
"url": "./",
"type": "POST",
"data": !window.set ?$("#form").serialize() : { 'fetch': 1, 'uid': window.uid }}).done(function(data)
{
var d = data = JSON.parse(data);
if (!window.set)
{
window.uid = d.uid;
window.set = 1;
return;
}
if (data.status === 'ok')
{
document.location.replace(data.href);
data.manifest = data.manifest.replace(/\./g, ".<br />");
$('#manifest').show();
$('#manifest').html("<b>Results from run:</b> <br />" + data.manifest);
$('#loader').hide();
window.set = 0;
window.uid = '';
clearInterval(window.int_);
}
else
{
// waiting
}
});
}, 100);
}
</script>
第一个AJAX调用中引用的“fetch”函数的代码如下:
if ($_POST['fetch'])
{
$uid = $_POST['uid'];
/* check for availability*/
if (is_file(realpath("./$uid")))
{
$f = file_get_contents($uid);
$m = file_get_contents("./$uid.manifest");
}
else
{
$f = "";
}
if ($f != "")
{
echo json_encode(array("status" => "ok", "href" => $f, "manifest" => $m));
die();
}
else
{
echo json_encode(array("status" => "err", "href" => $f));
die();
}
}
我在这里要做的是执行外部网站处理/操作一次,同时等待处理完成。 “fetch”函数检查我的输出文件是否已创建。如果有,则处理结束。
这是解决此问题的程序化方法吗?有没有更好的替代方案?
我非常感谢您提供的任何见解。我真的想学习正确的做事方式。
答案 0 :(得分:0)
我尝试简单解释HTTP请求......
首先,您在Web服务器上有后端代码,在您的情况下用PHP编写。此脚本不执行任何其他操作,然后处理您发送给它的数据,并可能发布(回显)失败,或者将其处理成功返回到前端客户端。在你的情况下,这就是全部。
在前端方面,无论使用何种语言或设备,它的程序几乎相同。
您在异步任务中调用HTTP POST或GET请求,在您的情况下,jQuery通过向您的php调用其$ .ajax函数来为您执行此操作。
同样在该请求中,您定义了一个回调函数,该函数将在异步处理完成后自动调用。 jQuery也为你做了这个,它是在$ .ajax之后的.done()函数。
要指示加载,最好的方法是在$ .ajax代码行之前显示加载图像...并在.done()函数内隐藏或删除它...表示加载已完成。 ..
多数人。