ajax возвращает [объект объекта] - PullRequest
0 голосов
/ 14 апреля 2020

Я создаю веб-приложение для викторины с php и ajax, где по щелчку переключателя запускается функция для получения новой строки в базе данных, используя ajax и php, но выводится объектный объект внутри указанный элемент div каждый раз, когда вызывается ajax.

- это сторона кода ajax:

<script>  
 $(document).ready(function(){  
      $('input[type="radio"]').click(function(){  
           var answer = $(this).val();
           var question_id = $('#dataContainer').data('value');  
           $.ajax({  
                url:"quizengine.php",  
                method:"POST",  
                data:{
                    answer:answer,
                    question_id:question_id
                },
                dataType: 'json',  
                success:function(response){  
                    console.info(response);
                    $('#question').text(response);
                    $('#answer_one').text(response);
                    $('#answer_two').text(response);
                    $('#answer_three').text(response); 
                }  
           });

      });  
 });  

</script>

, а вот сторона кода php

<?php
session_start();
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "rubiqube";
$connection = new mysqli($servername, $username, $password, $dbname);
if ($connection->connect_error) {
    die("Connection failed: " . $connection->connect_error);
}
?>
<?php 

if (isset($_POST['answer'])) {
    global $connection;
        $answer = $_POST['answer'];
        $question_id = $_POST['question_id'];
        $result = mysqli_query($connection, "SELECT is_right FROM answers WHERE question_id='$question_id'");
        $row = mysqli_fetch_assoc($result);
        if (isset($row)) {
            $correct = $row['is_right'];
            if ($answer === $correct) {
                $next = mysqli_query($connection, "SELECT Questions.question_id,Questions.lesson,Questions.instruction,Questions.question,Questions.image,Questions.option_type,Questions.question_value,Answers.answer_one,Answers.answer_two,Answers.answer_three,Answers.is_right FROM Questions LEFT JOIN Answers ON Questions.question_id = Answers.question_id WHERE Questions.question_id>'$question_id' ORDER BY Questions.question_id ASC LIMIT 1");

                $nextrow = mysqli_fetch_assoc($next);
                echo json_encode($nextrow);
                exit();
            }else{
                echo "error";
                exit();
            }
        }

    }




?>

вот изображение того, о чем я говорю введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Когда ответ возвращается в обратном вызове успеха, dataType: 'json' преобразует его из json в объект (таким образом, почему вы видите [объект объекта]). Вы не можете напрямую использовать метод .text(), поскольку для этого требуется, чтобы он был строкой. Вы можете сделать $('#question').text(response.key) в зависимости от структуры данных.

Вам нужно просто либо l oop пройти через объект и использовать данные, либо получить доступ к свойствам напрямую (т.е. console.log(response.key)).

Вот некоторая документация от MDN о том, что делать с объектом. Работа с объектами

0 голосов
/ 14 апреля 2020

Создайте объект Вопроса на стороне сервера, затем в своем ответе ajax сделайте следующее:

success:function(response){

                $('#question').text(response.propertyName);
                //propertyNamerefers to the one you made on the serverside
            } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...