Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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
Javascript 包含<;脚本>;_Javascript_Ajax - Fatal编程技术网

Javascript 包含<;脚本>;

Javascript 包含<;脚本>;,javascript,ajax,Javascript,Ajax,我已经看到了一些主题,这些主题暗示了我正在寻找的线索,但我需要更进一步 我有一个站点,它使用AJAX在添加到站点时插入新内容。此内容有时包含内联JavaScript。现在,如果此内联JavaScript包含一个document.write()调用,则页面的其余内容将被删除并替换为write调用的内容,并破坏页面 这些内联元素始终包含在DIV中,但由于站点软件的性质,DIV可能在同一帖子中出现多次,因此无法使用名称或ID帮助脚本找到新内容的位置 我看到很多帖子说当前正在执行的应该作为文档中的最后一

我已经看到了一些主题,这些主题暗示了我正在寻找的线索,但我需要更进一步

我有一个站点,它使用AJAX在添加到站点时插入新内容。此内容有时包含内联JavaScript。现在,如果此内联JavaScript包含一个
document.write()
调用,则页面的其余内容将被删除并替换为write调用的内容,并破坏页面

这些内联
元素始终包含在
DIV
中,但由于站点软件的性质,
DIV
可能在同一帖子中出现多次,因此无法使用名称或ID帮助脚本找到新内容的位置


我看到很多帖子说当前正在执行的
应该作为
文档中的最后一个元素出现。但是,当
通过AJAX添加到页面中间时会发生什么?在页面布局中,
并不总是页面上的最后一个条目,因此,如果在页面加载完成后添加,即使不是在文档末尾,它是否仍会作为
文档中的最后一个条目出现。脚本?

恐怕您手头有一个严重的问题

文档完成呈现后,
document.write
将替换它。因此,如果您试图通过AJAX在脚本元素中包含此类调用的标记,并且希望执行这些脚本,那么您将覆盖文档


换句话说,您真的不能将AJAX和
文档混合使用。你需要重新设计才能不使用其中一个。

虽然这个答案确实满足了我的具体问题,但它可能对其他人有所帮助,因此我将发布我所做的:

我使用组成javascript调用的一些原始数据为包含的DIV创建一个ID,允许该DIV具有唯一的ID,脚本可以在DOM中访问该ID。这样,当代码通过AJAX脚本注入并执行内联脚本时,它将以自己容器的innerHTML为目标,并用预期显示在页面上的代码覆盖自己

在我的特定用法中,我的脚本会将一系列数字作为参数,并根据数字所代表的内容,用各种图像、符号和单词替换它们。我最终将输出格式化为如下内容:

<div id="{param1param2param3}">
<script>
   document.getElementById('param1param2param3').innerHTML={all the content the script is supposed to generate};
</script>
</div>

document.getElementById('param1param2param3')。innerHTML={脚本应该生成的所有内容};
无论页面是正常加载还是通过AJAX加载,结果都是一样的。在罕见的情况下,有两个块具有相同的ID(意味着完全相同的参数),所有浏览器似乎都能正确处理它,并用预期的代码替换每个DIV。我不知道每个脚本是否真正针对自己的容器或具有相同ID的任何其他容器,但由于它们最终都会有相同的内容,所以只要所有div都被替换为它们预期的内容,这并不重要。
它可以通过让脚本从正在处理的DIV中删除ID来进一步扩展,这样其他“相同”的块就不会在同一个DIV上反复执行。

如果您将ajax内容作为字符串获取,而不是(我想)让框架将其注入页面,你可以用它做任何你喜欢的事情?Alex K.说的-获取并存储脚本内容,操纵它来替换document.write调用或其他有问题的代码,然后将正确的版本插入DOM。如果您在将文档放到页面上之前先解决问题,则无需担心
document.scripts
的顺序。我的问题是,这是一个讨论论坛,因此我无法直接更改AJAX调用。我所能做的就是决定AJAX调用注入的代码。我所做的可能更好地由服务器端脚本(如PHP)提供,但我也没有访问服务器的权限,因此它必须由JavaScript或其他一些在线方法生成。结果将是一个DIV,其中包含一个脚本,动态生成内容并将其插入到DIV中,但由于它是动态内容,因此DIV不能有特定的ID。