将javascript变量添加到javascript src?

时间:2013-01-28 03:10:55

标签: javascript html src

这可能听起来有些讽刺,但我正在尝试检索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中插入var“vidid [0]”,这不起作用。现在,我确实完成了我的作业,但是当我设置一个新的脚本属性并设置新的src tot时它仍然无效。谁能在这帮助我?

5 个答案:

答案 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&amp;alt=json-in-script&amp;callback=youtubeFeedCallback1";
document.body.appendChild(script);

最后一条建议:我发现您的回调中有全局变量,vidtitle1vidthumb1。无论你需要对它们的值做什么,都要从回调中做(最好去除全局变量),否则它可能无效。数据将以异步方式加载,因此只有在回调运行后,变量才能保证包含值。

答案 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&amp;alt=json-in-script&amp;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&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属性。

P.S。不知道它是否适用于js。这是jquery