5

jQuery.ajax()Gist を Github に投稿するのに問題があります。Gist は作成され、応答は です201 Createdが、Firebug の応答タブは空で、エラー コールバックがヒットします。

  var data = {
    "description": "posting gist test",
    "public": true,
    "files": {
      "test.txt": {
        "content": "hello gist!"
      }
    }
  }
  $.ajax({
    url: 'https://api.github.com/gists',
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(data)
  })
  .success( function(e) {
    console.log(e);
  })
  .error( function(e) {
    console.warn("gist save error", e);
  });

イライラすることに、jsfiddle では問題なく動作します: http://jsfiddle.net/vXpCV/


多分これが問題です。jsFiddle は異なる応答ヘッダーを取得しています:

Access-Control-Allow-Cred...    true
Access-Control-Allow-Orig...    http://fiddle.jshell.net
Access-Control-Expose-Hea...    Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-OAuth-Scopes, X-Accepted-OAuth-Scopes
Connection  keep-alive
Content-Length  1093
Content-Type    application/json; charset=utf-8
...
4

2 に答える 2

6

Forresto 自身の回答は完全に有効です。

http://local.dev/https://github.com/settings/applicationsに追加すると、修正されたようです。

...しかし、Gist + jQueryをグーグルで検索したときにこの回答が表示される限り、何が起こっているのかについての説明が必要です。

ブラウザーには、Same Origin Policyと呼ばれるセキュリティ上の問題があります。Web ページがそのページがロードされたサーバー以外のサーバーと通信することを禁止するため、これは基本的に機能しません。JSONPと呼ばれる回避策がありますが、この例では POST を使用している場合、GET リクエストに対してのみ機能します。

次に、 Cross-Origin Resource Sharing (CORS)と呼ばれる新しいテクノロジがあります。最新のブラウザーで開いたページは、古き良き AJAX を使用して他のサーバーと通信できます。

GitHub APIは、GitHub で OAuth アプリケーションとして登録されているドメインからの CORS リクエストのみを受け入れます。jQuery が POST 要求を送信すると、OriginHTTP ヘッダーが起動元のサイトのドメインと同じに設定されます。

しかし、私にとっては、ぎこちないOriginヘッダーでも切り取られたものはうまくいったと言わざるを得ません。それはうまくいきましたが、その理由はわかりません。:)

于 2013-05-15T19:44:43.880 に答える
2

https://github.com/settings/applicationshttp://local.dev/に myを追加すると、修正されたようです。

于 2012-06-19T23:27:38.307 に答える