为什么PHP生成的内容在通过jQuery加载时会抖动,我该如何解决?

时间:2013-02-19 21:45:46

标签: php ajax jquery

当我在由jQuery异步加载的文件中生成PHP时,文本似乎在动画运行时抖动或闪烁。这不会发生在所请求文件中的常规HTML中,而只会发生在使用PHP生成的内容中。

只需要一些关于什么可以结束抖动的提示。

以下是main.php中的jQuery:

$(document).ready(function(){
    var demo = $('#demo');
    demo.hide();
    $("button").click(function(){
        demo.load('demo.php', function() {
        demo.show('medium');
        });
    });
});

以下是demo.php中的HTML和PHP:

<p><?php echo "Hello World with PHP trough AJAX"; ?></p>

我真的不确定从哪里开始。我应该完全避免在demo.php中使用PHP吗?即便如此,我还是希望能够在称为通过AJAX的脚本中使用PHP。

根据要求,这是完整的事情:

main.php

<!DOCTYPE html>
<html>
<head>
    <title>Testing Ajax</title>
    <link rel="stylesheet" type="text/css" href="main.css" />
    <meta charset="utf-8" />
    <script type="text/javascript" src="js/jquery-1.9.0.js"></script>
    <script>
        $(document).ready(function(){
            var demo = $('#demo');
            demo.hide();
            $("button").click(function(){
                demo.load('demo.php', function() {
                    demo.show('medium');
                });
            });
        });
    </script>
    <style type="text/css">
        #demo {background-color: MidnightBlue;color: white;padding: 0.1em 1em 1.5em 1.5em;}
        #demo h1 {color: white;}
    </style>
</head>
<body>
    <section>
        <article>
            <h1>Ajax</h1>
            <hr />
            <button>Load External Content</button>
            <div id="demo"></div>
        </article>
    </section>
</body>
</html>

(我喜欢MidnightBlue比CornflowerBlue更好......)

demo.php

<h1>Ajax criex Hello World!</h1>
<p><?php echo "PHP also cries Hello World trough Ajax!"; ?></p>

3 个答案:

答案 0 :(得分:1)

从技术上讲,使用PHP生成的文本与ASP.net中生成的文本与.txt文件中包含的文本与键盘上键入的文本之间的文本完全没有区别 - 它都是字母和数字。事实上,我会尽可能地说,在没有其他线索的情况下检查文本,它完全是100%不可能告诉它是如何创建的。不,你不应该用AJAX来避免使用PHP。

您看到的任何“抖动”都是其他问题的产物,很可能与浏览器性能有关 - 处理器可用性,可用内存,当前进程内存消耗,扩展活动/对页面内容的干扰等。

答案 1 :(得分:1)

我不知道这是否会对你有所帮助。如果上面显示的代码是really所有代码,可能不会。

但是:一段时间后,当我通过Ajax加载内容时,我在动画中也遇到了抖动问题。原因是:加载的内容包含带有其他动画命令的Javascript代码,然后两个动画都受到干扰。也许这也是这种情况。

答案 2 :(得分:1)

在我的测试中,同时试图重现&#34;抖动&#34;你的代码产生了一个无限的ajax循环(在Web控制台中查看它,你的看到),这很可能是你的抖动影响:

这是一个基本的PHP和AJAX示例:

<?php 
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest' && $_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['action'])){
    $action = $_POST['action'];
    switch($action){
        case "hello":
            echo "Hello World with PHP through AJAX";
            break;
        case "foobar":
            echo "Hello Foobar";
            break;
    }
    die;
}
?>

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
           var action = this.value;
           ajaxload('demo',action);
    });
});
function ajaxload(placement,action){
    $.post("./demo.php", { 'action': action },
    function(data) {
        $("#"+placement).hide().html(data).fadeIn('slow');
    });
}
</script>


<button type="button" value="hello">Hello World</button>
<button type="button" value="foobar">Foobar</button>


<p id="demo"></p>