微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 在服务器重新启动时显示等待页面

我有一个服务器并为它创建一个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;
                }
            }
        );
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    <div class="col-lg-6 col-lg-offset-3" id="mydiv">
        <div class="mydiv_inhalt">
            <h2>Rebooting...</h2>
            <p>This can take about 2 minutes.</p>
            <center>
                <div class="waiting" id="waiting" style="margin-top:30px; margin-left: 0px;">
                    <center><img class="loading_table" src="http://www.securenet.com/sites/default/files/spinner.gif" alt="spinner gif"></center>
                </div>
            </center>
        </div>
    </div>

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;
        }
    });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐