jQuery. Ajax. Переменная “undefined”

338
17 февраля 2017, 05:02

У меня такая проблема, что при отправке формы регистрации через ajax имя и логин становятся "undefined" и, соответственно не могут добавиться в БД. Если использовать только PHP, то всё работает нормально.

Подскажите в чем может быть дело.

array(2) {
  ["name"]=>
  string(9) "undefined"
  ["login"]=>
  string(9) "undefined"
}

Форма отправки.

<div class="transparent">
<div class="reg">
<p id="login">Регистрация</p>
<form action="registration_test.php" method="post" id="formlogin"><br />
Введите имя:<br />
<input type="text" name="name" maxlength="20">
Введите логин:
<input type="text" name="login" maxlength="20" required="required">
<input type="submit" value="Готово" name="send" id="submit"></p>
    <div id="success"></div>
    </form>
</div>
</div>

Файл с ajax-запросом.

$(document).ready(function(){
$("#submit").click( function(){
  var name = $(name).val();
  var login = $(login).val();
  var data= "name=" + name + "&login=" + login;
  $.ajax({
          method: "post",
          url: "registration_test.php",
          data: data,
          success: function(data){
              $("#success").html(data);        
          }
      });
  $("#formlogin").submit(
          function() {return false;}
            );
    });
});

PHP-обработчик.

<?php
/*session_start(); /* Создание сессий */
define("Server","localhost");
define("User","root");
define("Pass","12345");
define("DBname","registration");
require_once 'ConnectDB.class.php';
//создаём подключение
$connect = ConnectDB::Connect(Server, User, Pass, DBname);
$header = $connect->query("SET NAMES utf8");
    $name = trim($_POST['name']);
    $login = trim($_POST['login']);
    echo '<pre>';
    var_dump($_POST);
    echo '</pre>';
            echo ($_POST['name']);
    if(!$login){
        echo "Не заполнено обязательное поле";
    }
    else{
        $check = $connect->query("SELECT 'id' FROM users WHERE username='$login'");
        $row = $check->fetch_array(); //Выбирает одну строку из результирующего набора и помещает ее в ассоциативный массив, обычный массив или в оба 
        if (!empty($row["id"])) {
            echo "Извините, введённый вами логин уже зарегистрирован.<a href='reg.php'> Введите другой логин</a>.";
        }
        else{
            $result = $connect->query("INSERT INTO users (username,name,whitelist) VALUES ('$name','$login', '1')") or die ( "Error : ".mysql_error() );
        // Если все нормально то выводим сообщение.
        if($result){
            //header("Location: index.php");
            echo 'Успешная регистрация!';
            ConnectDB::CloseConnect();
        }
        else echo 'No';
    }}
?>
Answer 1

При событие submit. Вот уже несколько лет использую похожий код.

$("#formlogin").submit(function(event) {
  // Prevent default posting of form - put here to work in case of errors
  event.preventDefault();
  // Abort any pending request
  if (request) {
    request.abort();
  }
  // setup some local variables
  var $form = $(this);
  // Let's select and cache all the fields
  var $inputs = $form.find("input");
  // Serialize the data in the form
  var serializedData = $form.serialize();
  // Let's disable the inputs for the duration of the Ajax request.
  // Note: we disable elements AFTER the form data has been serialized.
  // Disabled form elements will not be serialized.
  $inputs.prop("disabled", true);
  // Fire off the request to /form.php
  request = $.ajax({
    url: "/form.php",
    type: "post",
    data: serializedData
  });
  // Callback handler that will be called on success
  request.done(function(response, textStatus, jqXHR) {
    // Log a message to the console
    console.log("Hooray, it worked!");
  });
  // Callback handler that will be called on failure
  request.fail(function(jqXHR, textStatus, errorThrown) {
    // Log the error to the console
    console.error(
      "The following error occurred: " +
      textStatus, errorThrown
    );
  });
  // Callback handler that will be called regardless
  // if the request failed or succeeded
  request.always(function() {
    // Reenable the inputs
    $inputs.prop("disabled", false);
  });
});
READ ALSO
Как в phpunit задать id сессии

Как в phpunit задать id сессии

Например незалогиненый пользователь заходит на сайт и для него сразу создаётся командаВ таблицу команд записывается id сессии

351
Как отследить развертывание скрипта

Как отследить развертывание скрипта

Не судите строго, я только стажируюсьВ данный момент развернул у себя локально веб приложение, достаточно сложное, построено на фрейворке...

372
Странные символы в начале ajax ответа

Странные символы в начале ajax ответа

При ajax запросе к контроллеру, получаю в ответ перед json набор из 6 символов - "\uO"Когда делаю запрос к другом контроллеру к тому же коду, в ответе...

334
Выбор способа оплаты в paymaster?

Выбор способа оплаты в paymaster?

ЗдравствуйтеНужно сделать оплату на сайте с помощью paymaster, встал вопрос о выборе оплаты, читал что paymaster поддерживает множество способов...

276