这是我正在尝试做的事情:
$.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
。
还有其他人遇到过这个问题吗?
答案 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.
});