1

GitHubのAPIを使用して別のメディアタイプ(この場合はHtml )を要求するための正しいAccept HTTPヘッダーを設定するにはどうすればよいですか?電流content objectは常にbase64としてエンコードされますが、レンダリングされたhtmlとして必要ですapplication/vnd.github.VERSION.html+json

$.ajax({
    url: "https://api.github.com/repos/jquery-boilerplate/patterns/readme",
    headers: { 
        Accept: "application/vnd.github.v3.html+json"
    },
    dataType: 'jsonp',
    success: function (data) {
        console.log(data.data.content); // "IyNSZWN..."
    },
    error: function (error) {
        console.log(error);
    }
});

私もjQuerysを使おうとしましたがbeforeSend、成功しませんでした。

beforeSend: function(jqXHR){
    jqXHR.setRequestHeader("Accept", "application/vnd.github.v3.html+json");
}

だから質問:

コンテンツをデコードせずにレンダリングされたhtmlを取得することは可能ですか?

decodeURIComponent(
    window.escape(
        window.atob(
            data.data.content.replace(/[^A-Za-z0-9\+\/\=]/g, "")
        )
    )
)

後でマークダウンパーサーの間にそれを解析しますか?

4

1 に答える 1

1

を使用してdataType: "jsonp"います。JSONPは<script>、別のドメインからデータをロードするためにドキュメントにタグを挿入することで機能します。また、<script>タグは、ヘッダーを設定する機能を提供せずに、URLにGETリクエストを送信するだけで機能するため、Acceptヘッダーは無視されます(使用しているブラウザーの開発ツールで確認できます)。また、ヘッダーは無視されているため、Accept: */*エンコードされたデータをロードするデフォルト値のが与えられます。

解決策は、JSONP(dataType: "jsonp")を使用するのではなく、JSON(dataType: "json")を使用することです。これにより、jQueryは<script>タグではなくXHRを使用するようになります。ただし、データが別のドメインにあり、同一生成元ポリシーに違反しているため、XHRを使用するとエラーがスローされます。これを回避するには、リクエストを行っているドメイン(リクエストを行っているウェブサイト)に対してGitHubを使用してOAuthアプリケーションを設定します。これにより、JSON dataTypeを使用してクロスオリジンリクエストを行うことができます(これはCORSを渡すことで機能します)ヘッダー)。これについてもっと読む:

http://developer.github.com/v3/#cross-origin-resource-sharing

于 2013-02-22T21:35:29.410 に答える