Проблема JQUERY в цикле PHP

113
26 ноября 2020, 10:10

Подскажите, пожалуйста, я вывожу статьи и комментарии к ним в цикле PHP foreach.

...
foreach ($result as $articles){?>
<p><?echo $articles['title'];?></p>
<p><?echo $articles['content'];?></p>
foreach ($comm as $comment){?>
 <div class = "comment_show">
  <p><? echo $comment['user'];?></p>
  <p><? echo $comment['comm_text'];?></p>
</div>
<form class = "comment_form" action = "send.php" action ="POST">
<input type ="hidden" name ="article_id" value ="<? echo $articles['id']" class = "content_id"
 <input type ="text" name ="username" class = "userlogin">
 <textarea name ="comment" class = "comm_cont">
 <input type ="button" name ="submit" class = "submit"> 
</form>
<?php
}
}
?>

Код script.js

$(document).ready(function(){
  $('.submit').on('click', function(e) {
    e.preventDefault();
    var content_id = $('.content_id').val(); 
    var username = $('.userlogin').val();
    var message = $('.comm_cont').val();    
    var url = $('.comment-form').attr('action');
   //e.preventDefault();
    $.ajax({
      url: url,
      type: "POST",
      data: {        
        "post_id": content_id,
        "login": username,
        "comment": message,
        "submit": $(".submit").val()
      },
      cache: false,
      dataType: 'json',      
      success: function(response){  
          $('.comment_text').val('');
          $('.comment_show').append(response.username + response.login + response.comment + response.pubdate);
        }
      });
    });
  });

Проблема в следующем: Форма срабатывает только в 1-й выведенной статье. В остальных - не срабатывает.

Answer 1

Проблема вашего js-кода в следующем:

$('.content_id').val()  // и схожие селекторы

не знают, какой именно элемент с классом .content_id вы хотите использовать.

Но для упрощения вашего кода уже придумана функция serialize(), в итоге ваш код примет следующий вид:

// повесьте обработчик на событие "submit"
// это позволит вам обрабатывать даже те события 
// сабмита, которые инициированы нажатием кнопки Enter
$('.comment_form').on('submit', function(e) {
    // $(this) - это форма которая сабмитится
    var url = $(this).attr('action');
    e.preventDefault();
    $.ajax({
      url: url,
      type: "POST",
      // $(this) - это форма которая сабмитится
      data: $(this).serialize(),
      cache: false,
      dataType: 'json',      
      success: function(response){  
          $('.comment_text').val('');
          $('.comment_show').append(response.username + response.login + response.comment + response.pubdate);
        }
    });
});

Каждая форма будет выглядеть так:

<!-- Обратите внимание что POST это method-аттрибут -->
<form class = "comment_form" action = "send.php" method ="POST">
    <input type ="hidden" name ="article_id" value ="<? echo $articles['id']?>" class = "content_id">
    <input type ="text" name ="username" class = "userlogin">
    <textarea name ="comment" class = "comm_cont">
    <input type ="button" name ="submit" class = "submit"> 
</form>

На сервере вы должны будете проверить массив $_POST на то что он не пустой, или в нем есть, например, поле username, так как кнопка сабмита не передается на сервер. Проверить, какие ключи/значения приходят на сервер в массиве $_POST вы можете через print_r($_POST).

READ ALSO
Carbon Fields - Warning : Invalid argument supplied for foreach() in

Carbon Fields - Warning : Invalid argument supplied for foreach() in

На форуме много тем с этим вопросом но я для себя не решил проблемуНа плагине Carbon Fields 3

141
Открыть доступ к методу api

Открыть доступ к методу api

Возможно-ли в yii2 при использовании аутентификатора, открыть доступ к какому-либо методу(-ам)(в моем случае actionParents) для неаутентифицированного...

158
Здравствуйте! Есть проблема с ООП в PHP

Здравствуйте! Есть проблема с ООП в PHP

Начал недавно изучать ООП и решил переписать с нуля свой скрипт написанный с помощью процедурного стиля в ООП стильНо мой код почему-то работает...

112
Работа с get методом. Передача параметров

Работа с get методом. Передача параметров

]Код работает до момента когда я делаю запрос delete from он его просто как будто не читаетНе понимаю в чем дело

127