【问题标题】:jquery ajax and htmljquery ajax 和 html
【发布时间】:2009-06-13 21:24:45
【问题描述】:

有人知道如何在通过 ajax 加载的 html 中执行 javascript 函数吗?我的意思是 html 包含纯文本和 javascript。在我的情况下,似乎只有内联 javascript(例如 onclick="dosomething();return false")被执行。不幸的是,由 包装的预定义函数被忽略了..

我通过网站搜索了几篇文章,但结果要么使用 getScript 加载纯 js,要么使用 eval。请帮我解决这个问题!非常感谢!

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    文件 1:

    <script type="text/javascript">
    function test() {
      alert('i got loaded dynamically!');
    }
    </script>
    

    文件 2:

    $.get('file1.html', function(html) {
      $(document).append(html);
      test(); // alerts "i got loaded dynamically!"
    });
    

    See it in action.

    【讨论】:

      【解决方案2】:

      根据the doco,如果您使用$.ajax 并指定"html" 的数据类型,则在插入DOM 时会评估包含的脚本标签。确保您的服务器返回正确的数据类型,请参阅Specifying the Data Type for AJAX requests 了解更多信息

      如果这没有帮助,Artem 的方法也很有效,只要您只提出一次请求。如果您一遍又一遍地拨打相同的$.get 电话,您最终会在脑海中得到 yourFunctionCall 的多个副本,并且会发生奇怪的事情:-)

      【讨论】:

        【解决方案3】:

        查找 jquery 事件委托和 .live() 方法。

        http://docs.jquery.com/Events/live#typefn

        如果您正在处理大量动态添加的 html,则事件委托特别有用且高效。

        【讨论】:

          【解决方案4】:

          我不知道这是否能解决您的问题...但是如果您加载的 html 还包含指向 jquery 代码库的链接,则可能会导致子代码无法正确链接到 jquery 对象的句柄( $)。

          【讨论】:

            【解决方案5】:

            如果我理解正确,您会从 AJAX 调用中收到混合了 javascript 代码的纯 HTML,例如带标签。我没有检查它,但您可以尝试执行以下操作:

            $.get( ajaxURL, function( data)
            {
               $( "head").append( $( data).find( "script"));
               yourFunctionCall( );
            });
            

            【讨论】:

              猜你喜欢
              • 2011-06-17
              • 1970-01-01
              • 2017-01-11
              • 1970-01-01
              • 2020-11-28
              • 2012-03-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多