Nice Kloe Ответов: 1

Детали не отображаются в модальном режиме с использованием PHP и ajax


Эй ребята

У меня есть bootstrap-модал, в котором я намереваюсь отобразить сведения о нажатой записи в таблице. Когда пользователь нажимает на кнопку "подробности" конкретной записи, я отправляю значение Id на страницу PHP с помощью Jquery и Ajax, где делается некоторый запрос в БД для возврата подробных данных в модальном режиме.
Мне удается получить идентификатор с помощью кода Jquery, но, похоже, он не публикуется на странице PHP, как определено в моем коде Ajax. Таким образом, у меня нет ничего отображаемого в модальном режиме, ничего, кроме сообщения об ошибке, которое я определил, если значение Id не опубликовано на странице PHP.

Мне никак не удавалось понять, что я делаю не так. Заранее спасибо за вашу помощь!

Что я уже пробовал:

Вот мой код

HTML-код:
<input type="button" name="select-students" value="Détails" id="<?php echo $row['sessionid']; ?>"class="btn btn-info select-students">


AJAX-код:
<script>
  $(document).ready(function(){
    $(document).on('click', '.select-students', function(){
      var sessionId = $(this).attr("id");
      alert(sessionId);

      if (sessionId != '') {
          $.ajax({
          url: "select_students.php",
          method : "POST",
          data : {sessionId:sessionId},
          success : function(data){
            $('#students').html(data);
            $('#detailmodal').modal('show');
          }
        });
      }
      else
      alert("Cannot display modal !");
    });
  });
</script>


PHP-код :
<?php
    if (isset($_POST["sessionId"])) {
        $output = '';
        //Fetching students who wrote a particular exam session
    $req = $db->prepare('SELECT distinct(Datesession),Code,sessionid,Startdate,Enddate from session');
    $req->execute();
    $donnee = $req->fetchAll();
    foreach ($donnee as $row) {

    $request = $db->prepare('SELECT name,surname,email  from candidat,session 
                             where sessionid= ' . $_POST["sessionId"]. ' ');
    $request->execute();
    $candidatId = $request->fetchAll();

    $rang = 1;
    $output .= '<div class = "table-responsive>"
    <table class="table table-bordered">
    <thead>
        <tr>
            <th>#</th>
            <th>Name</th>
            <th>Surname</th>
            <th>Email</th>
        </tr>
    </thead>
    <tbody>';

    foreach ($candidatId as $key) {
    $output .='
    <tr>
        <td>'.$rang.'</td>
        <td>'.$key['name'].'</td>
        <td>'.$key['surname']. '</td>
        <td>'.$key['email']. '</td>
    </tr>
    ';
    $rang = $rang + 1;
        }
    }
    $output .='
    </tbody>
    </table>
    </div>
    ';

    echo $output;
    }
    else
    echo "Erreur 404"
    ?>

1 Ответов

Рейтинг:
0

F-ES Sitecore

Попробуйте добавить тип контента

$.ajax({
          url: "select_students.php",
          contentType: "application/x-www-form-urlencoded; charset=UTF-8",
// rest of code


Это гарантирует, что данные будут отправлены в формате, который может быть проанализирован _POST


Nice Kloe

Спасибо за ваш ответ @F-ES Sitecore, но я попробовал и получил тот же результат, никаких деталей таблицы, отображаемых в модальном режиме

F-ES Sitecore

Однако правильно ли прошел sessionID?

Nice Kloe

Я не уверен, что это так. На моей странице PHP у меня есть условие if(isset($_POST['sessionId']), которое проверяет, что sessionId имеет значение, прежде чем отображать детали в модальном режиме. Но это другая часть этого условия, которая выполняется каждый раз. Я полагаю, это означает, что sessionId не имеет никакого значения на этой странице.

На уровне кода JS я вижу, что sessionId правильно захватывается из кнопки HTML, и поэтому он не является неопределенным

F-ES Sitecore

Итак, вы получаете текст ошибки 404 обратно? Используйте сетевые инструменты браузера (f12, затем посмотрите на вкладку Сеть), чтобы точно установить, что отправляется и что возвращается. Вы должны убедиться, что идентификатор отправляется и интерпретируется правильно, а затем проверить, что sql возвращает допустимые данные, поэтому проверяйте каждый шаг за раз, пока не найдете тот, который не сработает. Нет смысла делать предположения, используйте методы отладки, чтобы проверить, что происходит.

Nice Kloe

Я использовал сетевые инструменты и при просмотре вкладки "заголовки" вижу, что URL-адрес запроса выглядит следующим образом : http://localhost/projects/HTML/select_students.php?sessionId=1-да. Из этого я вижу, что sessionId отправляется на сервер.
Посмотрев на вкладку "ответ", я увидел, что сервер возвращает сообщение "Ошибка 404".
Есть кое-что, что меня почему-то раздражает: посмотрев на вкладку "заголовки", я увидел, что метод запроса был определен как "GET". Это нормально?
Я признаю, что не являюсь экспертом в использовании элемента inspect для отладки кода. Пожалуйста, есть ли где-то еще, что я должен проверить, чтобы увидеть, что происходит не так?

F-ES Sitecore

Да, это должен быть пост, а не получить, так что там происходит что-то странное. Является ли ввод в форме с помощью метода get? Еще один длинный шанс-добавить вызов для предотвращения дефолта в случае, если вы получаете два вызова, один в ajax и один, когда форма продолжает отправляться. preventDefault остановит отправку формы

$(документ).на('нажмите', '.выберите-студенты', функция (е) {
е.метод preventDefault();
var sessionId = $(this).attr("id");

Nice Kloe

Нет, входные данные находятся в теге td, в таблице, и тип определяется как "кнопка". Таким образом, на странице не было сделано двух звонков