我无法使用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
...
答案 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似乎可以解决问题。