Получение данных из SQL, передача в jQuery и создание последующего списка

Основная концепция моей программы:

Страница загружается -> Пользователь нажимает категорию -> Новая боковая панель загружается с сообщениями из выбранной категории -> Пользователь нажимает на публикацию -> Пользователь перенаправляется на URL-адрес публикации

У меня есть сценарий jQuery, который слушает, когда пользователь щелкает категорию. Когда они это делают, он передает это имя категории в PHP, и мой PHP-скрипт запрашивает базу данных.

Скрипт PHP «выводит» два массива: «ID» и «Заголовки». Идея состоит в том, что jQuery затем извлечет оба этих массива, чтобы я мог использовать их дальше в jQuery (для создания нового элемента, содержащего сообщения из выбранной категории), однако я действительно изо всех сил пытаюсь передать два массива в jQuery из моего Скрипт PHP.

Я прикрепил код ниже:

jQuery в index.php

<script>
// jQuery
$(function() { // Ensures content is loaded before jQuery

    $('.categories').on('click', function () { //When a user clicks on a category hyperlink
        category = this.id; // Set category based on link ID eg. "Cultural Development"
        load("get_posts_from_category.php", { // Retrieve all posts in category from database
            category: category // POST request information
        });
        var PHP_ids = <?php echo json_encode($post_ids); ?>; // Copy PHP array of post ID's into jQuery
        var PHP_titles = <?php echo json_encode($titles); ?>; // Copy PHP array of post title's into jQuery
        $.each(PHP_ids, function (post_id, title) {
             $('#posts').innerHTML = "<ul id='>" + post_id + "<'>" + title + "</ul>";
        });
    });
});

</script>

PHP в get_posts_from_category.php

include 'functions.php';
db_connect(); // Connect to database

// prepare and bind
$stmt = $GLOBALS['mysqli']->prepare("
      SELECT ID,post_title FROM wplg_2_posts WHERE post_type='post' AND post_status ='publish' AND ID IN (
      SELECT object_id FROM wplg_2_term_relationships WHERE term_taxonomy_id IN (
      SELECT term_taxonomy_id FROM wplg_2_term_taxonomy WHERE taxonomy ='category' AND term_id IN (
      SELECT t.term_id FROM wplg_2_terms t WHERE t.name IN (?))))
      ");

$category = $_POST['category']; // Get category from jQuery
$stmt->bind_param("s", $category); // Prepare SQL query with user input

/* execute query */
$stmt->execute();

/* bind result variables */
$stmt->bind_result($post_id,$title);

// Instantiate arrays
$post_ids = array();
$titles = array();

// set parameters and execute. Store output 'ID' and 'Title' in arrays
while ($stmt->fetch()) {
    array_push($post_ids, $post_id);
    array_push($titles, $title);
}

var_dump($post_ids);
var_dump($titles);

Я считаю, что ошибка находится в моем сценарии jQuery, где я просматриваю каждый идентификатор в массиве и в результате генерирую элемент списка. Однако, прочитав документацию по jQuery .each и многочисленные вопросы по StackOverflow, я растерялся.

Любая помощь будет принята с благодарностью.

Не возвращайте два массива. Верните один массив, содержащий оба этих массива в качестве дочерних, и json_encode внешний массив, чтобы конечная точка могла его получить, декодировать как json и соответствующим образом обработать дочерние массивы.

Taplar 10.04.2018 17:34

Спасибо, @Taplar, я попробую. Не могли бы вы пояснить, что вы имеете в виду, когда расшифровываете их?

Dominic Cotterill 10.04.2018 17:36

Для «декодирования» - JSON - это строка, ее необходимо преобразовать / декодировать обратно в объект.

freedomn-m 10.04.2018 17:37

Если запрос ajax ожидает возврата json, он может автоматически декодировать его за вас, то есть преобразовать его из текста в формате json в реальные объекты. Массивы в вашем случае. Если это не выполняется автоматически запросом ajax, это можно сделать с помощью JSON.parse(theResponseString).

Taplar 10.04.2018 17:37

@Taplar Спасибо за разъяснения. Попробовав ваше решение, я думаю, что обнаружил проблему, потенциально фундаментальное непонимание jQuery. Если я вызываю $.each(PHP_data, function (post_titles, post_ids) {, нужно ли передавать функции что-то другое?

Dominic Cotterill 10.04.2018 18:01
$.each() может работать с массивом или объектом. Если вы дадите ему массив, он будет перебирать каждый элемент в массиве. Если вы дадите ему объект, он будет перебирать каждую пару значений ключа в объекте. Это зависит от того, что вам нужно / есть, для того, как вы используете это в данной ситуации.
Taplar 10.04.2018 18:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
19
0

Другие вопросы по теме