2014-05-06 41 views
1

我希望從Yammer使用REST API獲取單個線程及其評論。使用標準的AJAX調用來獲取JSON結果產生以下錯誤:Yammer RESTful API和跨域Ajax調用

XMLHttpRequest cannot load https://www.yammer.com/api/v1/messages/in_group/1072435.json. 
No 'Access-Control-Allow- Origin' header is present on the requested resource. 
Origin 'http://localhost:52785' is therefore not allowed access. 

要允許跨域調用我可以使用下面的代碼使用JSONP結果:

$.ajax({ 
    type: 'GET', 
    url: "https://www.yammer.com/api/v1/messages/in_group/1072435.json", 
    dataType: "jsonp", 
    jsonp: false, 
    success: function(data) { 
     messages = data.messages; 
     //do stuff with messages 
    } 
}); 

不過,我得到以下錯誤: 未捕獲的語法錯誤:意外的令牌:

這發生在解析json結果 - 因爲我使用jsonp我期望結果以callFunction({json})的形式返回,但是我剛剛得到json。但是如果我進入Chrome的Network選項卡並調出請求,請求本身就會成功,並且我可以查看正確分組的json結果(我可以展開消息屬性並查看所有消息)。

看來我可以獲取數據,但不能使用它。有什麼辦法來防止這個錯誤,或者我從一開始就做錯了嗎?

+0

你是否能夠從yammer獲取數據? –

回答

1

首先,通過將jsonp設置爲false,告訴jQuery不要將?callback = [randomfunctionname]添加到url。根據jQuery文檔(https://api.jquery.com/jQuery.ajax/),還需要設置jsonpCallback屬性,否則jQuery將不知道在包裝的JSON返回時要調用哪個回調函數。

其次,爲了能夠使用JSONP,Yammer REST API需要支持這一點,因爲它們需要將JSON包裝在指定的回調函數中。否則,這只是對由於瀏覽器安全限制而不受支持的JSON文件的跨域調用。這是您在Chrome中發出請求並查看網絡標籤時看到的內容。

我不確定Yammer是否支持JSONP,但至少您應該修正您的請求,可能是通過刪除jsonp:false來使其更加默認。如果這不起作用,那麼可能是缺少對Yammer的JSONP支持。