1

我在 Facebook 应用程序的第一页中有很多服务器代码 (PHP)。我不希望用户在等待页面时看到加载动画。

我在这里看到了很多关于如何预加载页面(使用 ajax 或简单地使用 jQuery)的示例,但正如我所说,这是不同的,页面本身是在服务器上生成的,在这种情况下,用户只会看到一个白色的空白页。

我试图用另一个 php 页面包装我的主页:

<?php
include_once 'functions.php';
session_start();
$_SESSION['fb'] = new fb();

function phponload(){
    echo
        '<script>
            $(function(){
                $("#mwrapper").load("main.php");
            });
        </script>';
}
?>
<html>
<head>
    <script type="text/javascript">
        function delayer(){
        document.write("<?php phponload();?>");
        }
    </script>
    <link href='styles/default.css' rel='stylesheet' type='text/css' />
        <img class='mainload' src='images/loading.gif'></img>
    <script src='//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'></script>
    <link rel='stylesheet' type='text/css' href='plugins/clock/clock.css' />
</head>

<body onload='setTimeout("delayer()",1000);'>
    <div id='mwrapper'>

    </div>
</body>

</html>

现在主 php 页面 (main.php) 具有如下内容:

<!DOCTYPE html>
<html xmlns:fb="http://ogp.me/ns/fb#">
<meta name="google-site-verification"         content="Hyqgg60NTPNA7Q9Z5y9TtezUmwhiEomwZLJDt43Ki2g" />
<!--<img class='mainload' src='images/loading.gif'></img>-->
<?php
include_once 'functions.php';
include 'res/views/getTables.php';
define('TXT_QUESTIONS_NUM', 43);
session_start();
{... more PHP code ... }
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js">  </script>
    <script src='scripts/menuItems.js'></script>
    <script src='scripts/main.js'></script>
    <link href='styles/jquery.ui.smooth.theme.css' rel='stylesheet' type='text/css'/>
    <script type="text/javascript" src="plugins/clock/clock.js"></script>
    <link rel="icon" href="images/favicon.ico">
</head>

<div class='container' id='main'>
...
</div>
</body>
</html>

现在,所有代码都是循环播放 GIF - 但不加载 main.php :( 谢谢!

4

1 回答 1

1

Chrome/Firebug 控制台上是否有任何错误?

我不明白为什么你在 PHP 函数中生成加载器 JS 代码(你可以直接把它放在 HTML 中),但是这样做你在document.write函数的引号之间放置了一个多行块,这会导致错误。

但是,我认为问题在于浏览器将插入的内容解释</script>为 HTML 标记的结尾,因此后面的内容(document.write调用和delayer函数的结尾)被视为 HTML 而不是 Javascript。

编辑:补充答案,这是我用来加载另一个页面的代码:

function delayer(){
    $("#mwrapper").load("main.php", function(){
        $('.mainload').remove();
    });
}

不需要任何 PHP 生成。此外,该load函数的第二个参数是加载完成时调用的回调,在这种情况下,我曾经删除加载的 GIF。

于 2013-01-26T01:27:50.480 回答