2011-02-07 139 views
2

我试图做一个ajax请求vimeo从我们的web应用程序所需的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一样,我发现了JSON结果如预期,但只要在浏览器中输入vimeoDataUrl,因为我看着萤火虫请求我越来越有200空响应-状态。有人能帮助我吗?问题是位于vimeo还是我做错了什么?

回答

4

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

如果您在您的网址取消注释的最后一部分,&callback=?它工作得很好..因为jQuery会使用JSONP如果它发现它在URL中。

所以使用

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

JSONP

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

其他注意事项:

  • 由于浏览器的安全限制,大多数 “Ajax” 的请求是 受同源策略; 请求无法成功检索来自不同域, 子域或协议的 数据。
  • 脚本和JSONP请求不受同一来源策略 的限制。

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

+0

谢谢你的好答案演示。明天将进一步调查,并让你知道! – Rob 2011-02-07 12:46:52