XMLHttpRequest Post Method - функция остановки заголовков - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь отправить объект XMLHttpRequest на мой сервер Rails, но заголовки вызывают остановку моей функции. Вот мои наблюдения:

  1. Когда я закомментирую 3 строки кода, которые устанавливают заголовки, xhr.readyState в конечном итоге будет равен 4 (блоки предупреждений в анонимной функции отключаются).

  2. Если какая-либо из 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);
    }
    

Мои три вопроса:

  1. Что мне нужно изменить в приведенном выше коде для отправки данных методом POST?

  2. У меня сложилось впечатление, что метод POST требует отправки некоторых заголовков, но неясно, какие именно, хотя "xhr.setRequestHeader ('Content-type', 'application / x-www-form- urlencoded ');» кажется, что тот, который часто упоминается в ссылках. Может ли кто-нибудь помочь мне понять а) почему нужно отправлять заголовки и б) какие нужно отправлять?

  3. Я использую сервер 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 часа.

1 Ответ

1 голос
/ 26 января 2012

Ваша веб-страница с кодом JavaScript также живет на localhost: 3000? Если нет, то это считается междоменным запросом, и ваш сервер должен будет возвращать специальные заголовки. Итак, у вас есть два варианта:

1) Разместите веб-страницу в том же домене, что и сервер, что сделает запрос того же домена.

2) Пусть ваш сервер вернет соответствующие заголовки CORS. Вы можете узнать больше о CORS здесь: http://www.html5rocks.com/en/tutorials/cors/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...