Я пытаюсь отправить объект XMLHttpRequest на мой сервер Rails, но заголовки вызывают остановку моей функции. Вот мои наблюдения:
Когда я закомментирую 3 строки кода, которые устанавливают заголовки, xhr.readyState в конечном итоге будет равен 4 (блоки предупреждений в анонимной функции отключаются).
Если какая-либо из 3 строк заголовка не закомментирована, то объект xhr никогда не изменяет состояние (ни одно из окон предупреждения не срабатывает).
function saveUserProfile(){
var user_email = $('#userEmail_box').val();
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function(){
if (xhr.readyState==4 && xhr.status==200)
{
alert("Yes: " + xhr.readyState);
}
alert("No: " + xhr.readyState);
}
var method = 'POST';
var params = 'userEmail=user_email';
var url = 'http://localhost:3000/xhr_requests.json';
var async = true;
//Need to send proper header information with POST request
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('Content-length', params.length);
xhr.setRequestHeader('Connection', 'close');
xhr.open(method, url, async);
xhr.send(params);
}
Мои три вопроса:
Что мне нужно изменить в приведенном выше коде для отправки данных методом POST?
У меня сложилось впечатление, что метод POST требует отправки некоторых заголовков, но неясно, какие именно, хотя "xhr.setRequestHeader ('Content-type', 'application / x-www-form- urlencoded ');» кажется, что тот, который часто упоминается в ссылках. Может ли кто-нибудь помочь мне понять а) почему нужно отправлять заголовки и б) какие нужно отправлять?
Я использую сервер rails и работаю локально. В конечном итоге этот код будет выполняться на клиентской стороне мобильного устройства, которое будет отправляться на сервер размещенных рельсов для передачи и получения данных. Существуют ли ограничения при использовании метода POST на сервере rails? Помните, что я планирую использовать JSON при отправке информации клиенту с сервера.
Спасибо!
ОБНОВЛЕНИЕ: Заголовки должны приходить ПОСЛЕ открытия запроса xhr, но ДО его отправки:
xhr.open(method, url, async);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('Content-length', params.length);
xhr.setRequestHeader('Connection', 'close');
xhr.send(params);
Надеюсь, этот пост спасет кого-то еще 4 часа.