函数中的脚本不会回显

时间:2011-03-04 22:03:28

标签: php echo

当我试图回应

<script type='text/javascript'>
function rotate_$num(number) {
    num = number%$i;
    $('.$num').fadeOut('normal');
    $('#'+(num+1)).fadeIn('normal');
    number++;
    setTimeout('rotate_$num('+number+')',300);
}
</script>

来自PHP中的一个函数,它不会回显,但当我将<script>更改为<div>时,它可以正常工作。此外,当回声只是在一个php文件中,除了回声之外别无效,它可以工作。

这是整个功能:

function rename_name($name) {
    return str_replace(' ', '', $name);
}
function pane($result) {
    if($result['title']) {$title = ': '.$result['title'];}
    $name = rename_name($result[name]);
        echo "<div class='pane $name'>
            <h2>$result[name]$title</h2>";
        if (is_array($result['data'])) {
            $num = rand(0, 9999);
            foreach($result['data'] as $option) {

        $i++;

        if($i == 1) $display = 'block'; else $display = 'none';
                echo "<div id='$num$i' class='$num' style='display: $display;'><h3>$option[data]<span       class='whats'>$option[kind]</span></h3></div>";

            }
            //The below will echo when script is changed to div, why should it matter?
            echo "<script type='text/javascript'> function rotate_$num(number) { num = number%$i;

                    $('.$num').fadeOut('normal');
                    $('#'+(num+1)).fadeIn('normal');

                    number++;

                    setTimeout('rotate_$num('+number+')',300);
                }
            </script>";
            //The above will echo when script is changed to div, why should it matter?
        }
        else {
            echo "<h3>".$result['data']."<span class='whats'>$result[kind]</span></h3>";
        }
    echo "</div>";
}

这是传递给它的$ result数组

Array
(
    [name] => Mint
    [type] => 0
    [data] => Array
        (
            [0] => Array
                (
                    [data] => 67
                    [kind] => hits today
                )

            [1] => Array
                (
                    [data] => 24
                    [kind] => unique hits today
                )

            [2] => Array
                (
                    [data] => 158351
                    [kind] => hits total
                )

            [3] => Array
                (
                    [data] => 17826
                    [kind] => unique hits total
                )

        )

)

2 个答案:

答案 0 :(得分:0)

我不确定这是否是问题所在,但我尽量不让字符串像你使用echo语句那样跨越多行。尝试使用heredoc表示法,就像这样。

   $javascript = <<EOT
<script type='text/javascript'> function rotate_$num(number) { num = number%$i;
    $('.$num').fadeOut('normal');
    $('#'+(num+1)).fadeIn('normal');
    number++;
    setTimeout('rotate_$num('+number+')',300);
}
</script>
EOT;
    echo $javascript;

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

答案 1 :(得分:0)

我输入了完全相同的数组,并获得了预期的输出。

您是通过AJAX获取此数据然后将其放在页面上吗? Javascript无法将脚本标记写入DOM(至少不能通过innerHTML),因此会忽略它们。

如果这个AJAX数据,看起来你正在使用大量不必要的带宽来进行这种传输,特别是通过一遍又一遍地传输基本相同的脚本。我建议只传输数据(或者在HTML中,或者,如果你感觉非常酷,在JSON中然后让客户端运行模板),然后让原始脚本处理旋转。它不仅实际上工作,而且它也会变得更干净,更易于管理。毕竟,如果我正在使用这个应用程序并想要更改窗格旋转的工作方式,那么这不是我首先要查看的特定代码段。