2012-06-19 27 views
4

我在使用jQuery.ajax()向Github發佈要點時遇到問題。要點被創建,響應是201 Created,但Firebug中的響應選項卡是空的,並且錯誤回調被命中。用jQuery.ajax保存匿名github要點()

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 
... 

回答

6

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

添加我http://local.dev/https://github.com/settings/applications似乎解決它。

...但只要這個答案顯示出來,當一個Google爲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標題,仍然可以解決這個問題。它的工作,我不知道爲什麼。 :)