Неправильное поведение JavaScript

#javascript #php #html #ajax

#javascript #php #HTML #ajax

Вопрос:

Я пытаюсь отправить данные моей формы в файл .php с помощью AJAX, но JS ведет себя неправильно, на самом деле происходит то, что когда я оставляю поля ввода пустыми, все работает нормально (т. Е. Программа php выполняется и вносит изменения в мою базу данных, как ожидалось), но когда я заполняю данные формы, например, когда я заполняю имя, адрес электронной почты, пароль, моя страница на стороне клиента обновляется, и выполняется досент файла php.

Извините за любые грамматические ошибки.

Я ценю любую помощь от кого угодно!

Большое спасибо!

 var form = document.getElementById("form_signup");
var formdata = new FormData(form);

$('#form_signup').on('submit', function(ev) {
  console.log(formdata);
  ev.preventDefault();
  $.ajax({
    url: "./process_php/Signup1.php",
    data: $('form').serialize(),
    cache: false,
    processData: false,
    contentType: false,
    type: "POST",


    success: function(response) {
      console.log("done"   response);
    }

  });
  return false;

});  
 <?php 
if (!isset($_REQUEST['username'])) {
	die();
}
$username = "temp_username";
$email = "temp_email";
$password = "temp_password";
$sqlconnection = new mysqli("", "", "", "");
$insertstatement = "INSERT INTO new_users (Name , Email , Password , Subscriber ) VALUES ('$username' , '$email' , '$password' , 'Normal' ) ";
if ($sqlconnection->query($insertstatement) === TRUE) { 						//if entered into db successfully
    echo "DONE";
}else {

	//run js to inform
	}

?>  
 <!--I have loaded jquery and also my external js file-->

<form class="font1" id="form_signup">
  <!-- main content , signup form -->
  <h2 id="form_name" class="font1">LOGIN</h2>
  <input type="text" name="username" placeholder="Username" minlength="3" autofocus id="username"><br>
  <input type="email" name="email" placeholder="Email" minlength="10"><br>
  <input type="password" name="pass" placeholder="Password" minlength="8"><br>
  <input type="submit" value="Confirm">
</form>  

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

1. Ну, для начала, var formdata = new FormData(form); должно быть внутри вашего обработчика отправки — в противном случае вы просто фиксируете состояние, которое было у формы при загрузке страницы, но до того, как пользователь что-либо ввел.

2. Какова цель formdata ? Вы устанавливаете его до того, как пользователь отправит форму, вы регистрируете его, но на самом деле вы не отправляете его на сервер.

3. Есть ли какие-либо ошибки в консоли JavaScript?

4. На самом деле, когда я пытаюсь получить данные в моем php-файле, я получаю сообщение об ошибке (неопределенный индекс)

5. Почему вы устанавливаете ContentType в false ?

Ответ №1:

Кажется, проблема с $('form').serialize() . Здесь form не то же самое, что var form = document.getElementById("form_signup");

 $('#form_signup').on('submit', function(ev) {
  console.log(formdata);
  ev.preventDefault();
  $.ajax({
    url: "./process_php/Signup1.php",
    data:  $('#form_signup').serialize(),
    // rest of the code
  

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

1. Хотя это лучший код, это было бы проблемой, только если бы у него было несколько форм на странице.

2. Я думал $('#form_signup') , что выберу только определенную форму.

3. $('form').serialize() сериализует первую форму на странице. Если существует только одна форма, это то же самое, что $(this) или $('#form_signup')

4. Таким образом, ваш ответ будет решением только в том случае, если у него есть несколько форм, и он пытается отправить форму, которая не является первой.