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站点上找到它:
只有当你使用特定的后缀选择器调用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 ‘);
这样的东西应该把标签作为一个未被执行的标签。
希望有帮助:)