将JavaScript变量添加到JavaScript SRC中?

4

可能听起来有点像新手,但我正在尝试检索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&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1' ></script>

您看到了,我正在尝试在src中插入变量“vidid [0]”,但是这并不起作用。我已经做了功课,但是当我设置一个新的脚本属性并将新的src设置为它时,它仍然不起作用。有人能帮帮我吗?


1
函数与脚本元素有什么关系? - David G
它从URL中获取"callback=youtubeFeedCallback1"函数,并使用它来获取YouTube视频的标题和缩略图 - B''H Bi'ezras -- Boruch Hashem
5个回答

6
您想要做的是 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&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1";
document.body.appendChild(script);

最后一个建议:我看到你在回调函数中使用了全局变量vidtitle1vidthumb1。无论你需要用它们的值做什么,都要从回调函数中处理(最好摆脱全局变量),否则很可能不起作用。数据将异步加载,因此变量只有在回调函数运行才保证包含其值。


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>

祝你玩得开心... :)


1

可以使用document.write或createElement()/appendChild()来实现。

var id = "asdf";
document.write('\x3Cscript type="text/javascript" src="foo.js?id=' + id + '">\x3C/script>');

对不起,我可能听起来像个新手,但我该怎么做呢? 比如 window.onLoad = load() 函数 load() { 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> <script>") } ? - B''H Bi'ezras -- Boruch Hashem

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&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1\"></script>");

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&amp;alt=json-in-script&amp;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属性。
附注:不知道它是否适用于js。这是jquery。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接