2012-06-19 3 views
4

У меня возникли проблемы с использованием jQuery.ajax(), чтобы опубликовать суть в Github. Создается сущность, и ответ 201 Created, но вкладка ответа в Firebug пуста, и обратный вызов ошибки попадает.сохранить анонимный github gist с jQuery.ajax()

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

Добавление моего http://local.dev/ к https://github.com/settings/applications, казалось, чтобы исправить это. собственный ответ

+0

не уверен, где можно добавить URL. возможно, пользовательский интерфейс изменился с тех пор, как вы предоставили этот ответ в 2012 году? – the0ther

6

Forresto является полностью действительным:

Добавление моего http://local.dev/ к https://github.com/settings/applications, казалось, чтобы исправить это.

... но до тех пор, пока этот ответ появляется, когда один googles для Gist + jQuery, он должен иметь объяснение того, что происходит.

У обозревателей есть проблема с безопасностью, называемая Same Origin Policy. Он запрещает веб-странице связываться с серверами, отличными от той, на которой была загружена страница, поэтому это в основном не должно работать. Существует метод обходного решения, называемый JSONP, но он работает только для запросов GET, в то время как этот пример имеет POST.

Тогда есть эта более новая технология под названием Cross-Origin Resource Sharing (CORS). Он позволяет открывать страницы в современных браузерах для связи с другими серверами с использованием старого старого AJAX.

GitHub API only accepts Запросы CORS от доменов, зарегистрированных как приложения OAuth на GitHub. Когда jQuery отправляет запрос POST, он устанавливает HTTP-заголовок Origin, равный домену сайта, с которого он был запущен.

Но я должен сказать, что для меня отрезанный отработал даже с шатком Origin. Это сработало, и я не знаю почему. :)

Смежные вопросы