jquery load()剥离脚本标签 – 解决方法?

有没有人知道jquery .load()解决从外部内容加载的脚本标签的工作?

有很多文件certificate这种情况发生了,但是经过4个小时搜索网络之后,我找不到一个解决方法吗?

我正在加载动态生成的div – 类似于搜索结果页面 – 并且需要将.click()绑定到每个动态生成的div中的元素。 我有一个执行html生成工作的php文件,并将所有html作为字符串返回但是我无法绑定jquery .click(),因为包含jquery函数的脚本标记被剥离了。

这是通过调用php文件加载外部内容的代码…

$("#titles_wrap").load("m_scripts/m_php/titles_loader.php", function(){ $..some code }); 

这里是生成div的php文件的循环(这很好用)…

 $tag1=''; $tag2=''; while($result_array = mysql_fetch_array($result)) { if($i2<=($titles_total)){ $_SESSION['titles_string'] .= '
  • '.($i2+1).'
    current title:
    '.$result_array[1].'
    new title:
    GO
    '.$tag1.' $(".title_send_'.$i2.'").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")}) '.$tag2.'
  • '; $i2++; } }

    对不起,如果第二个代码块有点“矫枉过正” – 让我知道简化的摘录是否更有用。 也就是说,你可以在php代码的最后一行的第8行看到应该用动态分配的选择器写入每个div的jquery函数。

    当然,可能是代码中还有其他错误,但是我不能测试它,直到我可以让.load()来阻止它!

    如果有人找到了解决方案 – 甚至是有限恩典的解决方案 – 太棒了!

    提前致谢,

    干杯,

    斯科特

    编辑 – 编辑 – 编辑 – 编辑 – 编辑 – 编辑 – 编辑 – 编辑

    @TJ Crowder @Frug

    谢谢你的帮助!

    我刚刚看了你演示中涉及的页面,是的,我看到你已经有了它的工作。 看起来很惊人 – 那些脚本标签,那里有很多人无法让它工作 – 不幸的是我就是其中之一!

    我在演示和代码情况之间看到的唯一区别是

    1)开始脚本标签中没有类型声明,

    2)你正在加载一个带有脚本标签的页面作为DOM的一部分,而我正在加载php字符串输出(我真的不认为这很重要’,呃?当它到达客户端时它全部来到了同样的事,没有?)

    3),你的.load调用正在获取整个页面,而我的只返回元素。 我已经改变输出字符串以包括所有和标签但grrrrrr …我仍然无法得到dem该死的脚本标签显示在DOM中。

    有什么建议? 我不知道有什么负荷可能是什么! 谢谢S.

    jQuery load 不会删除脚本标记( 示例 ),并且您从PHP脚本返回的内容中没有脚本标记。 有一些JavaScript,但它没有正确嵌入script标记中,因此浏览器无法识别它。

    如果你想要这个JavaScript:

     ... '.$tag1.' $(".title_send_'.$i2.'").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")}) '.$tag2.' ... 

    要被识别为JavaScript,请将其放在script标记中。

     ... '.$tag1.'  '.$tag2.' ... 

    …或者更好的是,在内容的末尾使用单个script标记来挂钩,或者在load函数上使用回调。


    更新 :重新编辑:

    1)开始脚本标签中没有类型声明,

    没关系,请看这个更新的例子 。 浏览器根据它始终应用的相同规则解释script标记。

    2)你正在加载一个带有脚本标签的页面作为DOM的一部分,而我正在加载php字符串输出(我真的不认为这很重要’,呃?当它到达客户端时它全部来到了同样的事,没有?)

    是的,一旦它到达浏览器,它们都会发生同样的事情。

    3),你的.load调用正在获取整个页面,而我的只返回元素。 我已经改变输出字符串以包括所有和标签但grrrrrr …我仍然无法得到dem该死的脚本标签显示在DOM中。

    我的例子只是加载一个代码段,而不是整页。

    我不知道你为什么不工作。 我想知道它是否与在循环中输出的多个脚本元素有关,或者是你正在连接click处理程序的事实,但它不是那些 。

    没有什么可以做的,但要采取你的非工作的例子,并逐渐剥离层,直到你找到的部分,当你删除它,让它开始工作。 从根本上说, 并不是说使用load会使脚本不起作用(无论你发现有多少人认为是这种情况;这是一个很大的世界,有很多人几乎都在思考)。 你必须放弃这个与jQuery的load函数相关的想法,这些函数对脚本做了任何事情; 它可能不是。

    调试这类事情的关键是简化,简化,简化 。 确保服务器为ajax调用返回的HTML看起来就像你认为的那样(没有奇怪的引号或其他东西)。 尝试使用静态页面。 等等。

    立即更新,您可以在jQuery doc站点上找到它:

    http://api.jquery.com/load/

    只有当你使用特定的后缀选择器调用load时才会删除标签。

    脚本执行

    使用不带后缀选择器表达式的URL调用.load()时,在删除脚本之前将内容传递给.html()。 这将在丢弃之前执行脚本块。 但是,如果使用附加到URL的选择器表达式调用.load(),则在更新DOM之前会删除脚本,因此不会执行脚本。 两种情况的例子如下:

    这里,作为文档一部分加载到#a中的任何JavaScript都将成功执行。 1

     $('#a').load('article.html'); 

    但是,在下列情况下,正在加载到#b中的文档中的脚本块被删除而不执行:1

     $('#b').load('article.html #target'); 

    这个线程现在有点老了,但我找到了一个解决方法,我想分享$.load + selector + 问题/function。 也许这对某人有帮助。 而不是$.load ,我用这个:

     $.ajax({ url: '/some/url', success: function(html) { var content = $('
    ').html(html).find('#my-custom-selector'); $('#container-to-place-html-in').html(content); } });

    干杯,亚历克斯

    你能否确认它是否正在剥离脚本或事件绑定不起作用? 但是,我认为你可以改变一点方法。 首先修改你的脚本

     $("#titles_wrap").load("m_scripts/m_php/titles_loader.php", function(){ $..some code $("[class^='title_send_']").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")}); }); 

    然后从php代码中删除脚本部分

     while($result_array = mysql_fetch_array($result)) { if($i2<=($titles_total)){ $_SESSION['titles_string'] .= '
  • '.($i2+1).'
    current title:
    '.$result_array[1].'
    new title:
    GO
  • '; $i2++; } }

    为什么不能使用回调函数来绑定事件而不是在php页面上内联它?

    可能有办法解决这个问题,但我不会在第一时间内联系它,这就是为什么你没有找到其他人这样做的原因。 如果你在回调中加入绑定,它们会在加载时附加。

    它很糟糕我知道但是你可以做的一件事就是在你正在加载的html中写一些东西然后你在回调中的.ajax或.load方法做一个字符串替换 – > html = html.replace(/ lscript / g,’script ‘);

    这样的东西应该把标签作为一个未被执行的标签。

    希望有帮助:)