Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.03.2014, 22:56
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Глюк на событии submit
При нажатии на кнопку, не срабатывает метод POST , а тут же срабатывает метод GET, куда подставляются значения username и password. Если я даже и добавлю к форме метод "POST", то JS-скрипт не успеет обработать событие submit, и данные уйдут не с помощью ajax().

Это может быть глюком Bootstrap?

<form class="form-horizontal login-form" name="login-form">
  <div class="form-group">
    <label for="input-username" class="col-lg-2 control-label">Имя</label>

    <div class="col-lg-10">
      <input name="username" value="name" type="text" class="form-control" id="input-username" placeholder="Имя">
    </div>
  </div>
  <div class="form-group">
    <label for="input-password" class="col-lg-2 control-label">Пароль</label>

    <div class="col-lg-10">
      <input name="password" value="pass" type="password" class="form-control" id="input-password" placeholder="Пароль">
    </div>
  </div>
  <div class="form-group">
    <div class="col-lg-offset-2 col-lg-10">
      <button type="submit" class="btn btn-primary" data-loading-text="Отправляю...">Войти</button>
      <span class="help-block error"></span>
    </div>
  </div>
</form>

<script>
  $(document.forms['login-form']).on('submit', function() {
    var form = $(this);

    $('.error', form).html('');
    $(":submit", form).button("loading");

    $.ajax({
      url: "/login",
      method: "POST",
      data: form.serialize(),
      complete: function() {
        $(":submit", form).button("reset");
      },
      statusCode: {
        200: function() {
          form.html("Вы вошли в сайт").addClass('alert-success');
          window.location.href = "/chat";
        },
        403: function(jqXHR) {
          var error = JSON.parse(jqXHR.responseText);
          $('.error', form).html(error.message);
        }
      }
    });
    return false;
  });
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 13.03.2014, 23:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Faab,
что у вас в 29 строке творится???
Ответить с цитированием
  #3 (permalink)  
Старый 13.03.2014, 23:52
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Этот отрывок взят из исходника на этом сайте - я не могу точно сказать как работает эта строка. На сколько я понял эта строка предназначена для аттрибута data-loading-text="Отправляю..."> в submit и видимо должна как то влиять на состояние кнопки после нажатия.

Единственное, что могу точно сказать, что кроме jquery и bootstrap никаких другие клиентские библиотеки не подключается.


Я уже комментировал строки 28 и 29, убирал аттрибут data-loading-text, всё равно после нажатия происходит событие GET и я получаю в адресную строку :
http://77.777.777.777:3000/login?use...&password=pass

Последний раз редактировалось Faab, 14.03.2014 в 00:00.
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2014, 01:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

рони,
поменяйте button на text в строках 29 и 36 и возможно вам улыбнётся счастье
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2014, 01:47
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

неа, чудо не произошло. У меня такое впечатления что до выполнении ajax вообще не успевает дойти дело. Но я не могу это протестировать, так как все записи в консоле обновляются/стираются.

Вот весь конечный исходный код (с поправкой submit на text - c.70 и c.77):

<!DOCTYPE html>
<html>
<head>
  <title>Регистрация и вход</title>

  <link rel="stylesheet" href="/vendor/bower_components/bootstrap/dist/css/bootstrap.css"/>
  <link rel="stylesheet" href="/css/app.css"/>

  <script src="/vendor/bower_components/jquery/jquery.js"></script>
  <script src="/vendor/bower_components/bootstrap/dist/js/bootstrap.js"></script>
  
</head>
<body>
<header>
  
</header>
<section class="container">

  <nav class="navbar navbar-default" role="navigation">
  <ul class="nav navbar-nav">
    <li><a href="/">Главная</a></li>
    
    <li><a href="/chat">Чат</a></li>
    
  </ul>
  <ul class="nav navbar-nav navbar-right">
    
    <li><a href="" onclick="$('<form method=POST action=/logout>').submit();return false">Выйти</a></form></li>
    
  </ul>
</nav>

  <h1>Регистрация и вход</h1>

  
<p>Введите имя пользователя и пароль. Если такого пользователя нет - он будет создан.</p>

<form class="form-horizontal login-form" name="login-form">
  <div class="form-group">
    <label for="input-username" class="col-lg-2 control-label">Имя</label>

    <div class="col-lg-10">
      <input name="username" value="name" type="text" class="form-control" id="input-username" placeholder="Имя">
    </div>
  </div>
  <div class="form-group">
    <label for="input-password" class="col-lg-2 control-label">Пароль</label>

    <div class="col-lg-10">
      <input name="password" value="pass" type="password" class="form-control" id="input-password" placeholder="Пароль">
    </div>
  </div>
  <div class="form-group">
    <div class="col-lg-offset-2 col-lg-10">
      <button type="submit"  class="btn btn-primary" data-loading-text="Отправляю..." > Войти</button> 
      <span class="help-block error"></span>
    </div>
  </div>
</form>


</form>
-

<script>
  $(document.forms['login-form']).on('submit', function() {
    var form = $(this);

    $('.error', form).html('');
    $(":text", form).button("loading");

    $.ajax({
      url: "/login",
      method: "POST",
      data: form.serialize(),
      complete: function() {
        $(":text", form).button("reset");
      },
      statusCode: {
        200: function() {
          form.html("Вы вошли в сайт").addClass('alert-success');
          window.location.href = "/chat";
        },
        403: function(jqXHR) {
          var error = JSON.parse(jqXHR.responseText);
          $('.error', form).html(error.message);
        }
      }
    });
    return false;
  });
</script></section>
<footer>
  
</footer>
</body>
</html>

Последний раз редактировалось Faab, 14.03.2014 в 01:50.
Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2014, 01:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Faab,
я не вижу замены в вашем коде
Ответить с цитированием
  #7 (permalink)  
Старый 14.03.2014, 01:58
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

$(document.forms['login-form']).on('submit', function() {
    var form = $(this);

    $('.error', form).html('');
    $(":submit", form).text("loading");

    $.ajax({
      url: "/login",
      method: "POST",
      data: form.serialize(),
      complete: function() {
        $(":submit", form).text("reset");
      },
      statusCode: {
        200: function() {
          form.html("Вы вошли в сайт").addClass('alert-success');
          window.location.href = "/chat";
        },
        403: function(jqXHR) {
          var error = JSON.parse(jqXHR.responseText);
          $('.error', form).html(error.message);
        }
      }
    });
    return false;
  });


снова нет, снова GET
Ответить с цитированием
  #8 (permalink)  
Старый 14.03.2014, 02:07
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Рони, а если вынесу кнопку submit за пределы формы (то есть станет просто кнопка), и повешу на этот элемент просто событие клик, то у меня стоит проблема, как мне заменить эту строчку тогда:
var form = $(this);
Ответить с цитированием
  #9 (permalink)  
Старый 14.03.2014, 02:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Faab,
url: "/login", это то сменили на то что вам нужно?
Ответить с цитированием
  #10 (permalink)  
Старый 14.03.2014, 02:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Faab
У меня такое впечатления что до выполнении ajax вообще не успевает дойти дело
Поставь точку останова в обработчике. Ну или алерт хотябы.
Сообщение от Faab
все записи в консоле обновляются/стираются
Ну так отключи. В хроме: правая кнопка мышы, Preserver log upon navigation.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При AJAX-запросе не посылается кнопка 'submit' hrundel Events/DOM/Window 17 31.05.2016 22:43
Нужно сделать проверку при нажати на submit ? ilyas-> Элементы интерфейса 4 09.10.2013 15:09
Метод submit() не передает массив $_POST ZaValera Общие вопросы Javascript 15 21.06.2012 16:02
привязать событие к submit flyingspook Общие вопросы Javascript 12 19.08.2011 14:35
submit в iframe по событию change vovasvv jQuery 1 21.05.2010 09:37