jquery 1.5对Vimeo的$ .getJSON请求有问题

时间:2011-02-07 10:11:44

标签: c# jquery asp.net-mvc

我正在尝试向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还是我做错了什么?

1 个答案:

答案 0 :(得分:4)

您无法向不同的域(JS docswikipedia)发出json请求 您需要使用 jsonp

如果您取消对网址中最后一部分的评论,那么&callback=?就可以了。因为jquery会在网址中找到它时使用jsonp。

所以使用

var vimeoDataUrl = "http://vimeo.com/api/oembed.json?url=http://vimeo.com/" + vimeoId + "&callback=?";
来自getJsondocs

  

<强> JSONP

     

如果URL包含字符串   “ 回调=? ”(或类似,如定义   由服务器端API),请求   被视为 JSONP 。见   关于jsonp数据类型的讨论   $ .ajax()了解更多详情。

     

附加说明:

     
      
  • 由于浏览器安全限制,大多数“Ajax”请求都是   遵守同一原产地政策;该   请求无法成功检索   来自不同域的数据,   子域名或协议。
  •   
  • 脚本和JSONP请求不受同一原始策略的约束   限制。
  •   

演示 http://www.jsfiddle.net/gaby/gQaXD/