5

我无法将jQuery.ajax()要点发布到 Github。要点已创建,响应为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的安全问题。它禁止网页与加载该页面的服务器以外的服务器进行通信,因此这基本上不应该工作。有一种称为JSONP的解决方法,但它仅适用于 GET 请求,而此示例具有 POST。

然后是这种称为跨域资源共享(CORS) 的新技术。它允许在现代浏览器中打开的页面使用良好的旧 AJAX 与其他服务器通信。

GitHub API仅接受来自在 GitHub 上注册为 OAuth 应用程序的域的 CORS 请求。当 jQuery 发送一个 POST 请求时,它会将OriginHTTP 标头设置为与其启动站点相同的域。

Origin但我应该说,对我来说,即使有一个乱七八糟的标题,剪断也能解决问题。它起作用了,我不知道为什么。:)

于 2013-05-15T19:44:43.880 回答
2

将我添加http://local.dev/https://github.com/settings/applications似乎可以解决它。

于 2012-06-19T23:27:38.307 回答