【发布时间】:2019-08-04 05:49:53
【问题描述】:
我正在使用Genius API 来检索给定歌曲的歌词并将它们嵌入到 HTML <div> 标记中。我正在通过 AJAX GET 请求使用 PHP 与此 API 进行交互。
如果 AJAX 请求成功,我会从我的 PHP 中检索以下 HTML:
<div id='rg_embed_link_2351532' class='rg_embed_link' data-song-id='2351532'>
Read <a href='https://genius.com/The-1975-the-sound-lyrics'>“The Sound” by The 1975</a> on Genius
</div>
<script crossorigin src='//genius.com/songs/2351532/embed.js'></script>
Genius API 返回的脚本标签在执行时会嵌入歌词和歌词信息。
我正在尝试将此 HTML 导入我现有的<div>。在这种情况下,<script> 部分将不会被执行。我尝试在 AJAX 的“成功”函数中使用 eval() 来动态执行此脚本,但没有成功:
$.ajax({
url: 'lyrics.php',
type: 'GET',
async: true,
success: function(success){
geniusHTML = success;
//Insert geniusHTML including script tag into div
var lyricsDiv = document.getElementById("lyricsDiv");
lyricsDiv.innerHTML = geniusHTML;
//Get the script tag from the html and use eval on it
var innerScript = lyricsDiv.getElementsByTagName('script')
eval(innerScript.outerHTML);
}
});
我已尝试评估:
-
.outerHTML-- 控制台显示此值为:<script crossorigin="" src="//genius.com/songs/2351532/embed.js"></script> -
.innerHTML-- 属性似乎为空。 -
.src-- 控制台显示此值为:http://genius.com/songs/2351532/embed.js。eval()函数在此使用Uncaught SyntaxError: Unexpected end of input时出错。
我觉得我可能会倒退。我应该从我的 AJAX 执行脚本返回 之前 我将它添加到 div 吗? (该脚本生成了相当多的 embed div 标签)
编辑
根据回答者 Sjoerd de Wit 的指示,我尝试从源标签的 src 属性创建一个新的脚本标签,并通过 document.head.appendChild 添加它。这不起作用,提供警告:
在“文档”上执行“写入”失败:无法写入 从异步加载的外部脚本到文档中,除非 它是显式打开的。
【问题讨论】:
-
eval()==evil()。不要使用它。您可以在互联网上到处阅读为什么使用它不好。 -
@MarkBaijens 注意!
标签: javascript php jquery html ajax