当我试图回应
时<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
)
)
)
答案 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中然后让客户端运行模板),然后让原始脚本处理旋转。它不仅实际上工作,而且它也会变得更干净,更易于管理。毕竟,如果我正在使用这个应用程序并想要更改窗格旋转的工作方式,那么这不是我首先要查看的特定代码段。