Переменные PHP не возвращаются к успеху AJAX / jQuery POST правильно с использованием json_encode () - PullRequest
0 голосов
/ 26 февраля 2019

Я часами пытался заставить это работать.У меня есть тег <div id=""data_friends> и hidden input field, которые я хочу обновить с помощью AJAX.Тег div выглядит следующим образом:

<div class="friends-tab-list" id="data_friends">

    <?php 
    //Default query limits results to 8

    $sql = ("SELECT * FROM users WHERE FIND_IN_SET(?, friend_array) > 0 LIMIT 0,8");
    $query = mysqli_prepare($con, $sql);
    $query->bind_param('s', $username);
    $query->execute();

    $result = $query->get_result();

    $num_rows = $result->num_rows;

        while ($row = $result->fetch_assoc()) {
        $row['profile_pic']; 
        $row['username'];

        echo "<a class='profile-img-item' href='" . $row['username'] . "'>
              <img src='" . $row['profile_pic'] . "' title='" . $row['username'] . "'>
              </a>";
                }
        $query->close();

          ?>
</div>

Скрытый ввод выглядит следующим образом: <input id='max' type='hidden' value='<?php echo $num_rows; ?>'>

Я нажимаю кнопку «Просмотреть больше друзей» и отправляю данные на includes/handlers/ajax_load_profile_friends.php используя следующее:

$.ajax({

    url:'includes/handlers/ajax_load_profile_friends.php',
    type:'POST',
    dataType: 'json',
    data:{'username':username, 'num_friends':num_friends, 'counter':counter},

        success: function(data) {
            $('#data_friends').html(data.html);
            $('#max').val(data.num_rows);
                }
        });

Данные, поступающие из ajax_load_profile_friends.php, выглядят так:

$query = mysqli_prepare($con,"SELECT * FROM users WHERE FIND_IN_SET(?, friend_array) LIMIT $counter"); 
$query->bind_param('s', $username);
$query->execute();

$result = $query->get_result();

$num_rows = $result->num_rows;
}       

while ($row = $result->fetch_assoc()) {
$row['profile_pic']; 
$row['username'];

$html = "<a class='profile-img-item' href='" . $row['username'] . "'>
          <img src='" . $row['profile_pic'] . "' title='" . $row['username'] . "'>
         </a>";

}   

echo json_encode(array('num_rows' => $num_rows, 'html' => $html));

Когда я запускаю это, я получаю единственное возвращение в моем, когда япредположим, чтобы получить возврат 16 записей с каждым кликом, который я думал, делая это в моей функции успеха $('#data_friends').html(data.html);
View all friends button

Значение в моем скрытом поле ввода <input id='max' type='hidden' value='<?php echo $num_rows; ?>'> не обновляется с помощью этого $('#max').val(data.num_rows);

Есть ли что-то, чего мне не хватает в ajax_load_profile_friends.php, что вызывает такое поведение?

** Имейте в виду, что я могу заставить это работать, когда я не использую json_encode и напишите функцию успеха, подобную этой $('#data_friends').html(data.html);, и удалите dataType: 'json', из AJAX.Проблема здесь в том, что в обоих случаях я не могу обновить скрытое значение ввода.Я решил, что попробую и исправлю этот метод, поскольку в большинстве примеров json_encode() указан как способ возврата данных.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы не объявляете переменную $ html перед циклом while.Попробуйте это

<?php

$query = mysqli_prepare($con,"SELECT * FROM users WHERE FIND_IN_SET(?, friend_array) LIMIT $counter"); 
$query->bind_param('s', $username);
$query->execute();

$result = $query->get_result();

$num_rows = $result->num_rows;
}       
$html = '';
while ($row = $result->fetch_assoc()) {
// $row['profile_pic']; 
// $row['username'];

$html .= "<a class='profile-img-item' href='" . $row['username'] . "'>
          <img src='" . $row['profile_pic'] . "' title='" . $row['username'] . "'>
         </a>";

}   

echo json_encode(array('num_rows' => $num_rows, 'html' => $html));
0 голосов
/ 26 февраля 2019
header( "Content-Type: application/json", TRUE );
$query = mysqli_prepare($con,"SELECT * FROM users WHERE FIND_IN_SET(?, friend_array) LIMIT $counter"); 
$query->bind_param('s', $username);
$query->execute();

$result = $query->get_result();

$num_rows = $result->num_rows;

$html='';

while ($row = $result->fetch_assoc()) {


$html .= "<a class='profile-img-item' href='" . $row['username'] . "'>
          <img src='" . $row['profile_pic'] . "' title='" . $row['username'] . "'>
         </a>";

}   

echo json_encode(array('num_rows' => $num_rows, 'html' => $html));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...