Jquery ajax требует второго щелчка, прежде чем данные формы будут вставлены в базу данных через php файл

Я просмотрел другие вопросы, связанные с этим, и я не могу найти ответ, который исправляет мою проблему.

Когда я нажимаю кнопку, чтобы отправить данные формы в файл php, где он проверен, и если он пройдет проверку, то поместит его в базу данных, он проверит проверку и выдаст ошибки, если они есть при первом щелчке, но если ошибок нет, он ничего не делает и требует второго щелчка, чтобы затем поместить данные в базу данных?

Я пробовал как document.ready, # item.click, так и даже поставил # item.click внутри функции document.ready, ни одна из которых не решила проблему.

Ниже приведены как jquery, так и php, которые касаются этого, если кто-то может указать мне в правильном направлении, я бы очень его оценил.

Jquery

$("#postcomment").click(function() {

 var Name = $("input#name").val();
 var Comment = $("textarea#comment").val()

 $("form").submit(function(){

 $.ajax({
 url: 'comment.php',
 data: { name: Name, comment: Comment}, 
 type: 'POST'
 });

 });
});

PHP

$_SESSION['name'] = $_POST['name'];
$_SESSION['comment'] = $_POST['comment'];

$ipaddy = $_SERVER['REMOTE_ADDR'];

if(Input::exists()){
 $name = trim (escape($_POST['name']));
 $comment = trim (escape($_POST['comment']));

 $validate = new Validate();
 $validation = $validate->check($_POST, array(
 'name' => array(
 'required' => true,
 'min' => 5,
 'max' => 50),
 'comment' => array(
 'required' => true,
 'min' => 10,
 'max' => 200)
 ));

 if($validation->passed()){

 $insCom = "INSERT INTO comments (name, comment, commentdate, ip) VALUES ('$name', '$comment', NOW(), '$ipaddy')";

 if($insCom = $db->query($insCom)){
 Session::flash('home', 'successfull');
 Redirect::to('test.php');
 } else {
 Session::flash('home', 'unsuccessfull');
 Redirect::to('test.php');
 }

 }else{
 foreach($validate->errors() as $error){
 Session::flash('home', $error, '');
 Redirect::to('test.php');
 }
 } 
}

HTML для формы @Yorick

<form id="commentForm" name="commentForm" action="" method="post">
 <label for="name">Name:</label>
 
 
 <label for="name">Comment:</label>
 
 
 <div id="btm">
 <button id="postcomment">Post Comment</button>
 <div id="sflash">
 <!--?php
 if(Session::exists('home')) {
 echo '<p-->', Session::flash('home'), '';
 }
 ?>
 </div>
 </div>
</form>
1 ответ

Удалить:

$("form").submit(function(){
}

Тип по умолчанию для a - submit, поэтому всякий раз, когда вы нажимаете на него, вы обрабатываете событие click и выполняете ajax-вызов, а затем браузер отправляет вам форму.

Если вы посмотрите на трассировку сети в консоли отладки браузера, вы увидите это.

Установите для этого типа = "кнопка", чтобы избежать этого. Также верните false из обработчика.click(), чтобы остановить щелчок от распространения, когда вы полностью его обработали.

$ ("Форма") действительно не требуется и просто вызывает еще одно представление формы.

Вам определенно нужно установить обработчик.click() внутри конструкции $ (document).ready(...).

licensed under cc by-sa 3.0 with attribution.