2011-02-07 92 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