我有一个服务器并为它创建一个Web界面,如果用户按下页面上的重启按钮,则用户被重定向到reboot.php,在那里他应该看到一个spinner gif直到服务器再次可以访问和服务器正在通过shell执行重新启动.如果服务器可以访问,那么我需要重定向到main.php
所以我创建了以下功能.该函数以5秒的超时开始,因为否则它将立即加载main.php,因为reboot命令占用了它的时间.
reboot.php
$ret = false;
test();
function test()
{
setTimeout
(
function()
{
$ret = ping("www.google.de");
if ($ret === false)
{
test();
}
else
{
window.location.href = "main.php";
}
},
3000
);
}
function ping(url)
{
$.ajax
(
{
url: url,
success: function(result)
{
alert('reply');
return true;
},
error: function(result)
{
alert('timeout/error');
return false;
}
}
);
}
Rebooting...
This can take about 2 minutes.
ajax.php
$cmd = filter_input(INPUT_POST, "cmd");
if ( isset( $cmd ) && $cmd == "check_online_status" )
{
echo "true";
}
在我的ajax.php中,如果呼叫成功,我只返回“true”.
但是,我的逻辑不起作用,似乎我的代码只尝试对我的ajax.php进行一次调用,然后再也没有尝试过,我在控制台中得到net :: ERR_CONNECTION_REFUSED.
我在我的代码中添加了很多警报,但它们没有被执行,所以我猜它在尝试net :: ERR_CONNECTION_REFUSED之后第二次不会尝试调用ajax.php.
我唯一的想法是等待足够的时间,然后重定向到main.php,但这不是一个好的解决方案,因为需要运气,如果时间不够等怎么办等等.
解决方法:
让我们总结一下代码中的问题:
>您需要使用setInterval每x秒执行一次该函数
> ajax请求是异步的,它应该保持这种状态.您不能指望回调的返回值,而应该在回调中执行操作
生成的代码更简单:
var pingUrl = "www.google.de";
var targetUrl = "main.php";
setInterval(ping, 3000);
function ping() {
$.ajax({
url: pingUrl,
success: function(result) {
window.location.href = targetUrl;
}
});
}
标签:jquery,php,javascript,ajax
来源: https://codeday.me/bug/20190611/1220180.html