Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过jqueryajax调用评估脚本_Jquery_Ajax - Fatal编程技术网

通过jqueryajax调用评估脚本

通过jqueryajax调用评估脚本,jquery,ajax,Jquery,Ajax,有人能告诉我为什么下面的函数可能不起作用吗。 get调用应该返回html和。我试图找到脚本元素,然后评估其中的内容。但它似乎不起作用 有什么想法吗 function showRecaptcha() { alert("test1"); var file = "recapatchatest.php"; $("div#commentWindow").get("../commentfiles/" + file, function(data) { var script = data.getElemen

有人能告诉我为什么下面的函数可能不起作用吗。 get调用应该返回html和。我试图找到脚本元素,然后评估其中的内容。但它似乎不起作用

有什么想法吗

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));
});
}

通过AJAX加载HTML页面、解析标记并评估它们听起来不是个好主意

当附加到DOM时,标记将自动运行。因此,只需将数据附加到DOM中,脚本就会运行

或者,将脚本放在它们自己的文件中,并使用$.getScript加载它们

另外,$divcommentWindow.get应更改为仅$divcommentWindow.get


通过AJAX加载HTML页面、解析标记并评估它们听起来不是个好主意

当附加到DOM时,标记将自动运行。因此,只需将数据附加到DOM中,脚本就会运行

或者,将脚本放在它们自己的文件中,并使用$.getScript加载它们

另外,$divcommentWindow.get应更改为仅$divcommentWindow.get


您没有使用正确的.get方法。你必须区分这两个:

您正在使用的-从jquery对象中匹配的元素中检索指定索引处的DOM元素

$.get-使用HTTP get从服务器加载数据

所以你显然应该使用第二个

请注意,数据的内容不是可以调用getElementByTagName的DOM元素,它只是一个HTML数据字符串

如果您试图将HTML加载到现有元素中,则应考虑使用哪些元素来完成您的操作:

.load url[,data][,CompleteSponsetText,textStatus,XMLHttpRequest]返回:jQuery

描述:从服务器加载数据,并将返回的HTML放入匹配的元素中


您没有使用正确的.get方法。你必须区分这两个:

您正在使用的-从jquery对象中匹配的元素中检索指定索引处的DOM元素

$.get-使用HTTP get从服务器加载数据

所以你显然应该使用第二个

请注意,数据的内容不是可以调用getElementByTagName的DOM元素,它只是一个HTML数据字符串

如果您试图将HTML加载到现有元素中,则应考虑使用哪些元素来完成您的操作:

.load url[,data][,CompleteSponsetText,textStatus,XMLHttpRequest]返回:jQuery

描述:从服务器加载数据,并将返回的HTML放入匹配的元素中

我认为您应该尝试$.get而不是$divcommentWindow.get

我认为您应该尝试$.get而不是$divcommentWindow.get

尝试替换

$("div#commentWindow").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);
    });
});
上面的代码已经根据注释进行了更新,现在可以正确处理脚本包含和内联脚本标记。

尝试替换

$("div#commentWindow").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);
    });
});
上面的代码已经根据注释进行了更新,现在可以正确处理脚本包含和内联脚本标记。

jQuery的get方法将字符串传递给回调函数。data.getElementsByTagName不起作用,因为getElementsByTagName不是字符串对象实例的有效方法

我不知道你为什么要用eval方法。该方法适用于JavaScript代码,即使忽略对脚本变量的赋值有缺陷,您的意图也是对HTML脚本元素数组调用eval

最后一个问题是jQuery的html方法忽略了传递给它的任何html标记字符串中的脚本标记

如果要向DOM添加脚本标记,则需要使用普通的JavaScript并完全绕过jQuery。

jQuery的get方法将字符串传递给回调函数。data.getElementsByTagName不起作用,因为getElementsByTagName不是字符串对象实例的有效方法

我不知道你为什么要用eval方法。该方法适用于JavaScript代码,即使忽略对脚本变量的赋值有缺陷,您的意图也是对HTML脚本元素数组调用eval

最后一个问题是jQuery的html方法忽略了传递给它的任何html标记字符串中的脚本标记


如果要将脚本标记添加到DOM中,则需要使用普通的JavaScript并完全绕过jQuery。

看看这个答案:看看这个答案:数据是字符串,而不是DOM元素。@Rocket-是,这就是为什么我使用正则表达式替换元素,然后将文本放在$html中选择脚本,并将其转换为div标记,以便
不会执行或被jquery删除。为了进行比较,History.js使用了一种非常类似的方法。感谢上面的介绍-但是脚本如何知道将执行的脚本放在哪里-即$divcommentWindowdata是一个字符串,而不是DOM元素。@Rocket-是,这就是为什么我使用正则表达式替换元素,然后将文本放在$html中选择脚本,并将其转换为div标记,以便jquery不会执行或删除它们。相比之下,History.js使用了一种非常类似的方法。感谢上面的介绍-但是脚本如何知道将执行的脚本放在哪里-即$divcommentWindowI使用。加载很多-但是当我这样做时,我调用的页面中的内容不会进行计算。老实说,我没有使用太多,但可以肯定的是,您没有使用正确的get方法。如果您的页面只包含脚本,请使用.I use.load lot(我使用.load lot),但当我以这种方式执行此操作时,我调用的页面中的不会进行计算。老实说,我没有使用太多脚本,但请确保您没有使用正确的get方法。如果您的页面只包含脚本,请转到。好的,您的建议很有帮助-这种方式感觉非常好complicated@Jeff:为了简单起见,我喜欢将我的脚本与我的HTML分开。好的,你的建议很有帮助-这种方式感觉非常好complicated@Jeff:为了简单起见,我喜欢将脚本与HTML分开。