所以我有这个返回html / js的PHP函数。但我发现我使用的方法是错误的而且效率不高。还有更好的方法吗?
这是代码的简化版本。
function doSomething() {
$speed = 1000;
$duration = 500;
$start = false; // this is a boolean and doesn't work below (not sure why)
$output = '<div class="container">something</div>' . "\r\n";
$output .= '<script type="text/javascript">' . "\r\n";
$output .= 'jQuery(document).ready(function() {' . "\r\n";
$output .= 'jQuery(".container.").cycle({' . "\r\n";
$output .= 'speed : ' . $speed . ',' . "\r\n";
$output .= 'duration : ' . $duration . ',' . "\r\n";
$output .= 'start : ' . $start . "\r\n"; // this doesn't work I think is because of it becoming a string instead of a boolean here.
$output .= '})' . "\r\n";
$output .= '})' . "\r\n";
$output .= '</script> . "\r\n";
return $output;
}
因此,您可以在上面看到一堆输出和一堆换行符,基本上很难维护和调试。此外,根据评论,START变量无效。
必须有更好的方法。我想过heredocs?但不确定......
感谢您的光临。
答案 0 :(得分:2)
我会使用以下内容:
function doSomething() {
$speed = 1000;
$duration = 500;
$start = (int)false; // this is a boolean and doesn't work below (not sure why)
$output = <<<END
<div class="container">something</div>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(".container").cycle({
speed : $speed ,
duration : $duration,
start : $start
})
})
</script>
END;
return $output;
}
echo doSomething();
易于维护
答案 1 :(得分:1)
你可以这样做:
function doSomething() {
$cycleArguments = array(
'speed' => 1000,
'duration' => 500,
'start' => false
);
$output = '<div class="container">something</div>' . "\r\n";
$output .= '<script type="text/javascript">' . "\r\n";
$output .= 'jQuery(document).ready(function() {' . "\r\n";
$output .= 'jQuery(".container.").cycle(' . "\r\n";
$output .= json_encode( $cycleArguments );
$output .= ')' . "\r\n";
$output .= '})' . "\r\n";
$output .= '</script>' . "\r\n";
return $output;
}
结合json_encode()
和 heredoc语法:
function doSomething() {
$cycleArguments = array(
'speed' => 1000,
'duration' => 500,
'start' => false
);
$jsonCycleArguments = json_encode( $cycleArguments );
$output = <<<OUTPUT
<div class="container">something</div>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(".container.").cycle( $jsonCycleArguments );
});
</script>
OUTPUT;
return $output;
}
另一种选择仍然是:
function doSomething() {
$cycleArguments = array(
'speed' => 1000,
'duration' => 500,
'start' => false
);
$output = array(
'<div class="container">something</div>',
'<script type="text/javascript">',
'jQuery(document).ready(function() {',
' jQuery(".container.").cycle(' . json_encode( $cycleArguments ) . ');',
'});',
'</script>'
);
return implode( "\r\n", $output );
}
等...
答案 2 :(得分:0)
您可以在单独的HTML文件中编写代码,使AJAX从php调用该文件,并根据需要使用AJAX响应中的HTML页面代码。
答案 3 :(得分:0)
以下是几个选项:
1)在你的页面顶部(或者如果你已经模块化了所有的JS,并且在你调用任何东西的初始化之前它们都不会触发到页面的底部),让php转储一个JSON编码的多维数组,包含您在该页面上需要的所有数据,到一个var。
您的JS(存储在静态文件中)将该var传递给其中一个init函数,并将对该数据进行操作。
2)从那里从html页面src="script.php"
调用php脚本,将JS作为单独的include存储,作为HEREDOC或模板值。
获取您的值,将它们插入模板并回显字符串。
为了使其正常工作,您必须使用MIME类型以使其正常工作。
3)重写你的apache安装以重写名称,编写一个路由脚本来处理值获取和模板,并根据所请求的文件扩展名返回一个mime类型。
这对于大多数网站来说都是过度杀戮,但对于希望所有JS都是外部的,希望JS文件包含动态数据的大型网站以及希望所有脚本标记都具有常规查看src
标记非常有用。
另一种方法是设置php来处理像PHP文件这样的“.js”文件(但是你需要弄清楚脚本中的类型,设置MIME类型)。