首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ajax动态加载Javascript函数?

问如何使用Ajax动态加载Javascript函数?
EN

Stack Overflow用户
提问于 2010-01-26 05:49:43
回答 2查看 1.7K关注 0票数 2

(反问句)

今天我遇到了一个奇怪的场景,我想让PHP更新javascript的动态行为。这很令人恼火,这是我尝试过的。

代码语言: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时,它的新函数定义的作用域仅限于新的脚本标记。页面上其他地方的脚本无法读取它。

所以这就是你要做的。

代码语言:javascript
复制
/*
 * index.html
 */
 <html>
     <head>
        <script type="text/javascript">
           var dynamicDoStuff;
        </script>
        <!-- Other Head Stuff -->
     </head>
     <body>
         <!-- the body of the site -->
     </body>
 </html>

和

代码语言:javascript
复制
/*
 * axax-php-javascript-function-loader.php
 */
 <script type="text/javascript">
     dynamicDoStuff = function(a,b){
         <?php
         //dynamically define function behavior
         ?>
     }
 </script>

通过在头文件中定义函数的名称,它变得可以全局访问,因此您可以使用ajax和(php或其他什么)动态地重用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-26 05:53:20

而不是仅仅

代码语言:javascript
复制
function newFunctionViaAjax() { ... }

您可以改为使用

代码语言:javascript
复制
window['newFunctionViaAjax'] = function newFunctionViaAjax() { ... };
票数 2
EN

Stack Overflow用户

发布于 2010-01-26 08:12:01

一种更好的方法可能是让AJAX方法返回数据,在本例中,是一个标志,指示该方法应该采用哪种行为。

代码语言:javascript
复制
var ajaxResponseHandler = function(jsonResponse) {
    dynamicDoStuff = jsonResponse.someFlagFromTheServer == someExpectedValue 
         ? staticDoStuffA
         : staticDoStuffB;
};

理想情况下,至少在大多数情况下,AJAX方法应该只返回数据。

此外,使用这种方法,您可以在客户机已经加载的普通JavaScript文件中定义所需的替代行为,而不是将JavaScript与您的PHP混在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2135924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档