Yammer RESTful API和跨域ajax调用

时间:2014-05-06 04:48:50

标签: ajax json rest jsonp yammer

我希望使用REST API从Yammer获得单个线程及其评论。使用标准的ajax调用来获取json结果会产生以下错误:

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
    }
});

但是,我收到以下错误:     未捕获的SyntaxError:意外的令牌:

这在解析json结果时会发生 - 因为我使用的是jsonp,我希望结果以callFunction({json})的形式返回,但是我只是得到了json。但是,如果我进入Chrome中的“网络”选项卡并显示请求,请求本身就会成功,我可以查看正确分组的json结果(我可以展开messages属性并查看所有消息)。

似乎我可以获取数据,但不能使用它。有没有办法防止这个错误,或者我从一开始就做错了吗?

1 个答案:

答案 0 :(得分: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的支持。