使用jQuery.ajax()保存匿名github gist

时间:2012-06-19 23:23:49

标签: jquery github github-api gist

我无法使用jQuery.ajax()向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
...

2 个答案:

答案 0 :(得分:6)

Forresto自己的回答是完全有效的:

  

http://local.dev/添加到https://github.com/settings/applications似乎可以解决问题。

...但是只要这个答案出现在Gist + jQuery的谷歌搜索中,就应该对正在发生的事情进行解释。

浏览器存在一个名为Same Origin Policy的安全问题。它禁止网页与除加载页面之外的服务器进行通信,因此这基本上不起作用。有一种称为JSONP的解决方法技术,但它仅适用于GET请求,而此示例具有POST。

然后是这种名为Cross-Origin Resource Sharing(CORS)的新技术。它允许在现代浏览器中打开的页面使用旧的AJAX与其他服务器通信。

GitHub API only accepts来自在GitHub上注册为OAuth应用程序的域的CORS请求。当jQuery发送POST请求时,它会将Origin HTTP标头设置为等于从其启动的站点的域。

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

答案 1 :(得分:2)

http://local.dev/添加到https://github.com/settings/applications似乎可以解决问题。

相关问题