这可能听起来有些讽刺,但我正在尝试检索YouTube视频的视频信息(我在一些教程中看到)基本上这里是代码
function youtubeFeedCallback1(data) {
var s = '';
var k = '';
s += data.entry.title.$t;
k += data.entry.media$group.media$thumbnail[2].url;
vidtitle1=s
vidthumb1=k
}
<script type="text/javascript" id="javaone" src='http://gdata.youtube.com/feeds/api/videos/'+vidid[0]+'?v=2&alt=json-in-script&callback=youtubeFeedCallback1' ></script>
正如您所看到的,我正在尝试在src中插入var“vidid [0]”,这不起作用。现在,我确实完成了我的作业,但是当我设置一个新的脚本属性并设置新的src tot时它仍然无效。谁能在这帮助我?
答案 0 :(得分:4)
您尝试做的事情称为JSONP。由于您不能使用常规Ajax调用从另一个域获取JSON(这会产生安全性),您必须添加一个脚本来调用您指定的回调函数,并将其传递给JSON。正如其他答案所说,您必须以编程方式创建脚本标记。我不会使用document.write
,因为它在页面加载后不起作用(新脚本将替换整个文档)。但是有一个非常简单的选择:
function youtubeFeedCallback1(data) {
var s = '';
var k = '';
s += data.entry.title.$t;
k += data.entry.media$group.media$thumbnail[2].url;
vidtitle1=s;
vidthumb1=k;
}
var script = document.createElement('script');
script.src = "http://gdata.youtube.com/feeds/api/videos/" + vidid[0] + "?v=2&alt=json-in-script&callback=youtubeFeedCallback1";
document.body.appendChild(script);
最后一条建议:我发现您的回调中有全局变量,vidtitle1
和vidthumb1
。无论你需要对它们的值做什么,都要从回调中做(最好去除全局变量),否则它可能无效。数据将以异步方式加载,因此只有在回调运行后,变量才能保证包含值。
答案 1 :(得分:2)
虽然CDATA工作正常,但使用document.createElement也是一个很好的选择。特别是如果你打算在URL上添加一些值,比如缓存破坏...
<script type="text/javascript">
var versionJSLink = "/Folder/sub_folder/version.js?version=" + Math.random();
JSElement = document.createElement('script');
JSElement.src = versionJSLink;
JSElement.onload = OnceLoaded;
document.getElementsByTagName('head')[0].appendChild(JSElement);
function OnceLoaded() {
// Once loaded.. load other JS or CSS or call objects of version.js
}
</script>
玩得开心.. :)
答案 2 :(得分:1)
document.write it或createElement()/ appendChild()
var id = "asdf";
document.write('\x3Cscript type="text/javascript" src="foo.js?id=' + id + '">\x3C/script>');
答案 3 :(得分:0)
页面中的代码段在哪里?如果它在<script>
标记内,问题是脚本标记被解释为javascript,而不是html。相反,您可以使用document.write
将脚本标记写入dom。
新代码如下:
function youtubeFeedCallback1(data) {
var s = '';
var k = '';
s += data.entry.title.$t;
k += data.entry.media$group.media$thumbnail[2].url;
vidtitle1=s
vidthumb1=k
}
document.write("<script type=\"text/javascript\" id=\"javaone\" src=\"http://gdata.youtube.com/feeds/api/videos/\"+vidid[0]+\"?v=2&alt=json-in-script&callback=youtubeFeedCallback1\"></script>");
脚本标记需要用javascript编写才能访问vidid
变量,但这意味着你必须操纵DOM才能添加脚本标记,因为你已不再使用HTML了。
答案 4 :(得分:0)
function youtubeFeedCallback1(data) {
var s = '';
var k = '';
s += data.entry.title.$t;
k += data.entry.media$group.media$thumbnail[2].url;
vidtitle1 = s
vidthumb1 = k
}
<script id="javaone"></script>
<script>
var fullSrc = "http://gdata.youtube.com/feeds/api/videos/"+vidid[0]+"?v=2&alt=json-in-script&callback=youtubeFeedCallback1";
$('#javaone').attr("src",fullSrc);
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
我想你明白了: 1.创建空脚本容器。 2.定义变量中的完整链接。 3.将此变量设置为空脚本的src属性。
P.S。不知道它是否适用于js。这是jquery