Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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
innerHTML不评估javascript吗?_Javascript_Ajax - Fatal编程技术网

innerHTML不评估javascript吗?

innerHTML不评估javascript吗?,javascript,ajax,Javascript,Ajax,我正在尝试一种将代码分解成单个文件的技术(这样一个可能有一堆不同部分的页面现在变成了多个文件,而不是一个庞大的HTML页面)并使用ajax加载它们,然后将内容设置为innerHTML到某个父div。这使得代码非常干净,在所有现代浏览器中都能很好地工作,但我注意到,当外部页面包含标记时,该标记中的javascript被忽略(未解析并加载到父页面的javascript上下文中),因此这些外部代码片段中存在的方法和变量根本就不存在 我在阅读脚本标记的内容,然后eval()整个过程中都做了一些工作,这是

我正在尝试一种将代码分解成单个文件的技术(这样一个可能有一堆不同部分的页面现在变成了多个文件,而不是一个庞大的HTML页面)并使用ajax加载它们,然后将内容设置为innerHTML到某个父div。这使得代码非常干净,在所有现代浏览器中都能很好地工作,但我注意到,当外部页面包含
标记时,该标记中的javascript被忽略(未解析并加载到父页面的javascript上下文中),因此这些外部代码片段中存在的方法和变量根本就不存在

我在阅读脚本标记的内容,然后
eval()
整个过程中都做了一些工作,这是可行的……然而,我很好奇,我是否忽略了将脚本包含在这些外部文件中的一些更原生的机制,或者这种方法是否真的是实现我目标的唯一方法


TIA

这不是
innerHTML
的工作。您可能应该将外部文件作为DOM对象加载(这是
XMLHTTPRequest
名称的来源),以便在添加之前将
脚本
标记转换为适当的对象

使用jQuery对Firefox进行的快速实验(在本页上,heh)表明,
innerHTML
将添加一个无法执行的脚本元素,而这确实会执行:

$( 'body' ).append( $('<script>console.log( "hello, world!" );</script>' ) );
$('body').append($('console.log(“hello,world!”););

脚本
标记不在DOM中,还是其中的代码没有执行?@JanDvorak“在正文中添加了2个字符。
eval()
?这似乎有点迂腐。@WaleedKhan,~~标记存在于我的外部代码片段中。因此,通过AJAX读取的代码是有效的HTML(包括有效的javascript)。整个过程在ajax请求中检索,然后通过innerHTML加载到一个封装DIV中。但是,在innerHTML中设置javascript时(或者永远都不会)不会对javascript进行评估。因此,正如我所说,我正在手动解析传入文本中的该块并对其进行评估(),但这对我来说似乎很难看。@JanDvorak,当然是:)有趣的。。。所以我非常熟悉XMLHTTPRequest,但在本例中,我使用了
jQuery.get()
来实现相同的结果。为此,我应该切换回纯javascript还是有一个jQuery模拟程序可以利用?@Dr.Dredel只需指定
'XML'
作为to
jQuery.get()
.ah。。我想我们在同一时间打字。你是说我应该使用append而不是innerHTML?@Dr.Dredel使用你想要的任何东西…
innerHTML
是DOM,不是jQuery API,所以我假设你没有使用jQ。要获得相同的语义,可以使用
$.replaceAll