任何人都可以告诉我为什么以下功能可能无法正常工作。
get
调用应该返回html和<script>
的混合。我正在尝试找到脚本元素,然后评估内部的内容。但它似乎没有起作用。
有什么想法吗?
function showRecaptcha()
{
alert("test1");
var file = "recapatchatest.php";
$("div#commentWindow").get("../commentfiles/" + file, function(data)
{
var script = data.getElementsByTagName("script");
$("div#commentWindow").html(eval(script));
});
}
答案 0 :(得分:2)
您没有使用正确的.get()方法。你必须区分这两个:
.get()(您正在使用的那个) - 从jquery对象中匹配的元素检索指定索引处的DOM元素。
jQuery.get()($ .get()) - 使用HTTP GET从服务器加载数据
所以你显然应该使用第二个。
请注意,data
的内容不是您可以调用getElementByTagName的DOM元素,它只是一个HTML数据字符串。
如果您尝试将html加载到现有元素中,则应考虑使用.load(),它完全符合您的要求:
.load(url [,data] [,complete(responseText,textStatus,XMLHttpRequest)])返回:jQuery
描述:从服务器加载数据并将返回的HTML放入匹配的元素中。
答案 1 :(得分:1)
通过AJAX加载HTML页面,解析出<script>
标签,eval
这些标签听起来不错。
当附加到DOM时,<script>
标记将自动运行。因此,只需将data
附加到DOM,您的脚本就会运行。
或者,将脚本放在他们自己的文件中,然后使用$.getScript
加载他们。
此外,$("div#commentWindow").get
应更改为$.get
。
$.get("../commentfiles/" + file, function(data)
答案 2 :(得分:1)
我认为你应该尝试$.get
而不是$("div#commentWindow").get
答案 3 :(得分:0)
尝试替换
$("div#commentWindow").get("../commentfiles/" + file, function(data)
{
var script = data.getElementsByTagName("script");
$("div#commentWindow").html(eval(script));
});
与
$.get("../commentfiles/" + file, function(data){
var script = data.getElementsByTagName("script");
$("div#commentWindow").html(eval(script));
});
您的原始代码实际上并未发出ajax请求。
此外,要获取脚本,请尝试将其作为成功处理程序:
var $content = $("#commentWindow");
$.get("../commentfiles/" + file, function(data){
var html = data;
html = html.replace(/<script/ig, "<div class='script'").replace(/<\/script/ig, "</div>");
var html = $(html);
var scripts = html.filter("div.script").add($(html).find("div.script")).detach();
$content.html(html);
scripts.each(function(){
var $this = $(this), s = document.createElement("script");
if ($this.attr('src') != "") {
s.src = $this.attr('src');
} else {
s.nodeValue = $this.text();
}
$content[0].appendChild(s);
});
});
以上代码已根据注释进行更新,现在可以正确处理脚本包含和内联脚本标记。
答案 4 :(得分:0)
jQuery的get
方法将字符串传递给回调函数。 data.getElementsByTagName
不起作用,因为getElementsByTagName
不是String
对象实例的有效方法。
我不确定你为什么要使用eval
方法。该方法适用于JavaScript代码,甚至忽略了您对script
变量的赋值存在缺陷,您的意图是在HTML eval
元素数组上调用SCRIPT
。
最后一个问题是jQuery的html
方法忽略了传递给它的任何HTML标记字符串中的SCRIPT
标记。
如果你想将SCRIPT
标签添加到DOM,你将需要使用普通的'vanilla JavaScript并完全绕过jQuery。