我正在尝试向vimeo发出ajax请求,以便从我们的网络应用程序所需的vimeo视频中获取数据。
var vimeoDataUrl = "http://vimeo.com/api/oembed.json?url=http://vimeo.com/" + vimeoId; //+ "&callback=?";
console.log(vimeoDataUrl); //http://vimeo.com/api/oembed.json?url=http://vimeo.com/16630327
$.getJSON(vimeoDataUrl, function (json, textStatus) {
if (json != null) {
var title = json.title;
var videoWidth = json.width;
var videoHeight = json.height;
if (title != null && videoWidth != null && videoHeight != null) {
var vimeoImageUrl = json.thumbnail_url;
$('#largeImageUrl').val(vimeoImageUrl);
$('#videoName').val(title);
$('#videoWidth').val(videoWidth);
$('#videoHeight').val(videoHeight);
hasValidVideoUrl = true;
}
}
else
{
//an message is shown
}
$('#videoName, #placeVideo').removeAttr('disabled');
$('img#loading').remove();
});
当我在像IE这样的浏览器中输入vimeoDataUrl时,我正在按预期获得json结果,但是当我在firebug中查看请求时,我得到一个200状态的空响应。有人可以帮帮我吗?问题是在vimeo还是我做错了什么?
答案 0 :(得分:4)
您无法向不同的域(JS docs和wikipedia)发出json请求 您需要使用 jsonp
如果您取消对网址中最后一部分的评论,那么&callback=?
就可以了。因为jquery会在网址中找到它时使用jsonp。
所以使用
var vimeoDataUrl = "http://vimeo.com/api/oembed.json?url=http://vimeo.com/" + vimeoId + "&callback=?";
来自getJson
docs 的
<强> JSONP 强>
如果URL包含字符串 “ 回调=? ”(或类似,如定义 由服务器端API),请求 被视为 JSONP 。见 关于jsonp数据类型的讨论 $ .ajax()了解更多详情。
附加说明:
- 由于浏览器安全限制,大多数“Ajax”请求都是 遵守同一原产地政策;该 请求无法成功检索 来自不同域的数据, 子域名或协议。
- 脚本和JSONP请求不受同一原始策略的约束 限制。