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 中插入 var "vidid[0]",但这不起作用。现在,我确实做了功课,但是当我设置一个新的脚本属性并设置新的 src 时,它仍然无法正常工作。有人能帮我一下吗?

4

5 回答 5

5

您正在尝试做的事情称为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);

最后一个建议:我看到您的回调中有全局变量,vidtitle1并且vidthumb1. 无论您需要对它们的值做什么,都可以从回调中执行(最好摆脱全局变量),否则它可能不起作用。数据将异步加载,因此只有在回调运行后才能保证变量包含它们的值。

于 2013-01-28T12:20:38.877 回答
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>

玩得开心.. :)

于 2013-03-01T12:51:14.633 回答
1

document.write 或 createElement()/appendChild()

var id = "asdf";
document.write('\x3Cscript type="text/javascript" src="foo.js?id=' + id + '">\x3C/script>');
于 2013-01-28T03:14:27.933 回答
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。

于 2013-01-28T03:17:43.190 回答
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 属性。

ps不知道js能不能用。这是 jQuery

于 2014-11-28T13:00:31.807 回答