jQuery.getJSON为youtube oembed导致“Uncaught SyntaxError:Unexpected token:”

时间:2011-07-03 06:46:30

标签: jquery json youtube jsonp oembed

这是我正在尝试做的事情:

$.getJSON('http://www.youtube.com/oembed?url=http://www.youtube.com/watch%3Fv%3DB-m6JDYRFvk&callback=?', 
           function(data) { console.log(data) });

在卷曲该网址时,我收到了以下回复:

{
    "provider_url": "http:\/\/www.youtube.com\/",
    "title": "Coder Girl",
    "html": "\u003cobject width=\"425\" height=\"344\"\u003e\u003cparam name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\"\u003e\u003c\/param\u003e\u003cparam name=\"allowFullScreen\" value=\"true\"\u003e\u003c\/param\u003e\u003cparam name=\"allowscriptaccess\" value=\"always\"\u003e\u003c\/param\u003e\u003cembed src=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\" type=\"application\/x-shockwave-flash\" width=\"425\" height=\"344\" allowscriptaccess=\"always\" allowfullscreen=\"true\"\u003e\u003c\/embed\u003e\u003c\/object\u003e",
    "author_name": "dalechase",
    "height": 344,
    "thumbnail_width": 480,
    "width": 425,
    "version": "1.0",
    "author_url": "http:\/\/www.youtube.com\/user\/dalechase",
    "provider_name": "YouTube",
    "thumbnail_url": "http:\/\/i3.ytimg.com\/vi\/B-m6JDYRFvk\/hqdefault.jpg",
    "type": "video",
    "thumbnail_height": 360
}

但是当我尝试执行上面的代码时,我得到了Uncaught SyntaxError: Unexpected token :(Chrome)。看起来这个问题可能与转义斜杠的转义有关,或者jQuery正在发送JSONP请求,但响应是纯JSON

还有其他人遇到过这个问题吗?

4 个答案:

答案 0 :(得分:3)

Youtube(截至本回答时)oembed不支持JSONP他们的请求,所以你得到的回报是正确的......但这不是你需要的。你需要 JSONP调用的内容如下所示:

functionName({
    "provider_url": "http:\/\/www.youtube.com\/",
    "title": "Coder Girl",
    "html": "\u003cobject width=\"425\" height=\"344\"\u003e\u003cparam name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\"\u003e\u003c\/param\u003e\u003cparam name=\"allowFullScreen\" value=\"true\"\u003e\u003c\/param\u003e\u003cparam name=\"allowscriptaccess\" value=\"always\"\u003e\u003c\/param\u003e\u003cembed src=\"http:\/\/www.youtube.com\/v\/B-m6JDYRFvk?version=3\" type=\"application\/x-shockwave-flash\" width=\"425\" height=\"344\" allowscriptaccess=\"always\" allowfullscreen=\"true\"\u003e\u003c\/embed\u003e\u003c\/object\u003e",
    "author_name": "dalechase",
    "height": 344,
    "thumbnail_width": 480,
    "width": 425,
    "version": "1.0",
    "author_url": "http:\/\/www.youtube.com\/user\/dalechase",
    "provider_name": "YouTube",
    "thumbnail_url": "http:\/\/i3.ytimg.com\/vi\/B-m6JDYRFvk\/hqdefault.jpg",
    "type": "video",
    "thumbnail_height": 360
});

...因为目前回来的是无效的JavaScript (本身就是这样),这就是JSONP的工作方式,响应实际上需要是可执行的JavaScript。

您可以通过在<script>块(see a demo here)中直接在页面中填写代码来获得相同的错误。


我不确定完全你想要做什么,但是如果你只是在嵌入作品之后,我推荐像jQuery-oembed这样的插件来做。如果您正在处理数据...您需要在服务器上处理JSON,然后在服务器上获取数据。

答案 1 :(得分:1)

从版本1.5开始,您不再需要使用jQuery。尝试$ .ajax()并设置crossDomain:true并删除所有的?回调包装器,看它是否有效。这是一种更可靠的方法,语法更清晰。

答案 2 :(得分:0)

或许更好的选择是通过调用在您自己的服务器上运行的Web服务来替换您的跨域调用,该服务为您运行调用。我的猜测是Chrome阻止了跨域请求。

答案 3 :(得分:0)

将结果字符串化为我。

$.getJSON('your_url_here', function(data) {
    console.log(data);  //"Object { Json content }"
    var jsonString = JSON.stringify(data);  //"{ Json content }", the "Object" literal is removed.
    var parsed = JSON.parse(jsonString); //Parse should work now.
});