функция ошибки $.ajax вызывается только при перезапуске сервера узла

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть форма регистрации, которая получает ошибки со стороны сервера, такие как HTTP code 400 (неверный запрос), если поле отсутствует.

Возможно, не требуется, но вот код:

HTML

 <div class="row">
    <div class="col-md-4 col-md-offset-4">
        <h1 class="text-center">SIGNUP</h1>
        <div class="well">
            <form role="form" id="signup_form">
                <div class="form-group">
                    <input type="text" class="form-control" id="signup_name" name="fullName" placeholder="Full Name">
                </div>
                <div class="form-group">
                    <input type="email" class="form-control" id="signup_email" name="username" placeholder="Enter email">
                </div>
                <div class="form-group">
                    <input type="password" class="form-control" id="signup_password" name="password" placeholder="Password">
                </div>
                <button type="submit" class="btn btn-default btn-block">Signup</button>
                <div id="signup_error_message" class="alert alert-danger"></div>
                <div id="signup_processing_message" class="alert alert-success">Processing...</div>
            </form>
        </div>
        <p class="help-block text-center"><span class="glyphicon glyphicon-lock"></span> SSL Secure</p>
    </div>
</div>
  

JS

 $('#signup_form').submit(function (event) {
    $('#signup_processing_message').show();
    event.preventDefault();
    var fieldValues = getFormObj('signup_form');
    $.ajax({
      type: 'post',
      url: '/signup/local',
      data: fieldValues,
      success: function (response, textStatus, xhr) {
        if (xhr.readyState === 4 amp;amp; xhr.status === 0) {
          alert('Aborted. Network issue.');
        } else if (response.message === 'success') {
          if ($('#signup_error_message').is(':visible')) {
            $('#signup_error_message').hide();
          }
          $('#signup_processing_message').html('Success');
          setTimeout(function (){ window.location.href = '/'; }, 500);
        } else {
          // Could this ever happen?
        }
      },
      error: function (response) {
        console.log(response);
        if ($('#signup_processing_message').is(':visible')) {
          $('#signup_processing_message').hide();
        }
        if (response.status === 400) {
          $('#signup_error_message').html('Please fill in the fields correctly.');
        } else {
          $('#signup_error_message').html('Please fill in the fields correctly.');
        }
        $('#signup_error_message').show();
      }
    });
  });

// For forms - signup, login etc. Returns an obj with the name and value of each field in the form.
function getFormObj(formId) {
  var formObj = {};
  var inputs = $('#'   formId).serializeArray();
  $.each(inputs, function (i, input) {
    formObj[input.name] = input.value;
  });
  return formObj;
};
  

Что касается серверной части, если введенная информация в порядке, форма будет выполнена успешно, иначе она может вернуть что-то вроде: http://screencast.com/t/sS5Vmar0Jk

Функция ошибки в $.ajax не обнаруживает эту ошибку HTTP. Однако, когда я перезапускаю сервер узла, ошибка обнаруживается и console.log(response) т.д. выполняются.

Есть идеи?

Комментарии:

1. Какой у вас код на стороне сервера? Вы завершаете свой ответ? В частности, часть обработки ошибок.

Ответ №1:

попробуйте использовать

 $.ajax({
    ...
    data: JSON.stringify(fieldValues),
    ...