(反问句)
今天我遇到了一个奇怪的场景,我想让PHP更新javascript的动态行为。这很令人恼火,这是我尝试过的。
/*
* ajax-php-javascript-function-loader.php
*
* this gets called by AJAX and defines or re-defines the
* definition of dynamicDoStuff()
*/
<script type="text/javascript">
function dynamicDoStuff(a,b){
<?php
//dynamically defined function behavior
?>
}
</script>这不起作用,因为当加载新的javascript时,它的新函数定义的作用域仅限于新的脚本标记。页面上其他地方的脚本无法读取它。
所以这就是你要做的。
/*
* index.html
*/
<html>
<head>
<script type="text/javascript">
var dynamicDoStuff;
</script>
<!-- Other Head Stuff -->
</head>
<body>
<!-- the body of the site -->
</body>
</html>和
/*
* axax-php-javascript-function-loader.php
*/
<script type="text/javascript">
dynamicDoStuff = function(a,b){
<?php
//dynamically define function behavior
?>
}
</script>通过在头文件中定义函数的名称,它变得可以全局访问,因此您可以使用ajax和(php或其他什么)动态地重用它。
发布于 2010-01-26 05:53:20
而不是仅仅
function newFunctionViaAjax() { ... }您可以改为使用
window['newFunctionViaAjax'] = function newFunctionViaAjax() { ... };发布于 2010-01-26 08:12:01
一种更好的方法可能是让AJAX方法返回数据,在本例中,是一个标志,指示该方法应该采用哪种行为。
var ajaxResponseHandler = function(jsonResponse) {
dynamicDoStuff = jsonResponse.someFlagFromTheServer == someExpectedValue
? staticDoStuffA
: staticDoStuffB;
};理想情况下,至少在大多数情况下,AJAX方法应该只返回数据。
此外,使用这种方法,您可以在客户机已经加载的普通JavaScript文件中定义所需的替代行为,而不是将JavaScript与您的PHP混在一起。
https://stackoverflow.com/questions/2135924
复制相似问题