Как манипулировать каждым элементом в массиве json до go, указав класс элемента c, href, id, text..et c? - PullRequest
0 голосов
/ 06 марта 2020

По сути, я щелкаю по элементу div, а затем добавляю данные из моей базы данных SQL в соответствующие места. Я пытаюсь go через каждый элемент в массиве и манипулировать ими, как я хочу. Скажем, я хочу добавить task_date: "2020-03-01 21:44:55" к href. и добавьте title: "asdfasdf" в класс divs (результат, конечно, в кавычках). Это может звучать глупо, но мне просто нужно знать, чтобы я мог сделать это сам, любым способом, который я выберу. Я знаю, что все это можно сделать с помощью Jquery, но как мне go через каждый результат управлять им индивидуально? мне нужно JSON.parse(response);? Или изменить мой PHP результат эха?
AJAX CALL

   $(function(){
      $(".task-listing").click(function() {
           $.ajax({
            type: 'POST',
            url: '/task-info-get.php',
            dataType: 'json',
            data: 'info=' + $(this).attr("id"),
            success: function (response) {
            //what i want:
            $(".link").attr("href", response[0]);
            $(".price").attr('class', response[1]);
        }
         })
       });
    });

PHP Файл

<?php
include 'sqlconnection.php';
$conn = OpenCon();

$stmt = $conn->prepare('SELECT task_date,title,description,location,price,startdate,tasktime FROM tasks WHERE pid='.$_POST['info']);
$stmt->execute();
$stmt->bind_result($task_date,$title,$description,$location,$price,$startdate,$tasktime);
while($stmt->fetch()) {
    $output[]=array(
        'task_date' => $task_date,
        'title' => $title,
        'description' => $description,
        'location' => $location,
        'price' => $price,
        'startdate' => $startdate,
        'tasktime' => $tasktime
    );
}
$json=json_encode($output);
echo $json;

$stmt->close();
CloseCon($conn);
?>

Успешный ответ в консоли

task_date: "2020-03-01 21:44:55"
title: "asdfasdf"
description: "asdfasdf"
location: "Local"
price: 3333
startdate: "2020-03-18"
tasktime: "00:00:00"

1 Ответ

1 голос
/ 06 марта 2020

Важно отметить, какой у вас тип переменной $output. Вы рассматриваете его как массив, а когда внутри вашего l oop вы добавляете массив как элемент массива в $output.

Ваш код:

$output[]=array(
    'task_date' => $task_date,
    'title' => $title,
    'description' => $description,
    'location' => $location,
    'price' => $price,
    'startdate' => $startdate,
    'tasktime' => $tasktime
);

что я предполагаю Ваше желание:

$output=array(
    'task_date' => $task_date,
    'title' => $title,
    'description' => $description,
    'location' => $location,
    'price' => $price,
    'startdate' => $startdate,
    'tasktime' => $tasktime
);

Два символа удалены. [].

Далее ваш Javascript. Вы обрабатываете свой ответ как индексированный массив (доступ к которому осуществляется с помощью цифровых клавиш, начинающихся с 0), когда вместо этого это ассоциированный массив (доступ к которому осуществляется с помощью произвольных ключей).

Примером может быть то, что у вас есть:

 $(".price").attr('class', response[1]);

Когда желаемый код должен быть:

 $(".price").attr('class', response['title']);

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

Off-topi c: Это мой первый SO-ответ. Я получал помощь от этого сайта в течение многих лет, поэтому я решил, что пора начать возвращать. Если у вас есть какие-либо рекомендации или ресурсы по вопросам этикета, которые я могу прочитать, чтобы улучшить качество ответов SO, сообщите мне Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...