1

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

ただし、次のエラーが表示されます: Uncaught SyntaxError: Unexpected token :

これは、json の結果の解析時に発生します。jsonp を使用しているため、callFunction({json}) の形式で結果が返されると予想されますが、json を取得しているだけです。しかし、Chrome の [ネットワーク] タブに移動してリクエストを表示すると、リクエスト自体は成功し、正しくグループ化された json の結果を表示できます (メッセージ プロパティを展開して、すべてのメッセージを表示できます)。

データは取得できるようですが、使用できません。このエラーを防ぐ方法はありますか、それとも最初から間違っていますか?

4

1 に答える 1

1

まず、jsonp を false に設定することで、URL に ?callback=[randomfunctionname] を追加しないように jQuery に指示します。jQuery のドキュメント ( https://api.jquery.com/jQuery.ajax/ ) によると、jsonpCallback プロパティも設定する必要があります。そうしないと、ラップされた JSON が返されたときに呼び出すコールバック関数を jQuery が認識できないためです。 .

次に、JSONP を使用できるようにするには、指定したコールバック関数で JSON をラップする必要があるため、Yammer REST API でこれをサポートする必要があります。それ以外の場合は、ブラウザのセキュリティ制限によりサポートされていない JSON ファイルへの単なるクロスドメイン呼び出しです。これは、Chrome でリクエストを行い、[ネットワーク] タブを確認すると表示されるものです。

Yammer が JSONP をサポートしているかどうかはわかりませんが、おそらく jsonp:false を削除してデフォルトにすることで、少なくとも要求を修正する必要があります。これが機能しない場合は、おそらく Yammer で JSONP がサポートされていない可能性があります。

于 2014-05-06T10:09:30.937 に答える