Json_encode печатает данные в HTML

Я пытаюсь передать таблицу базы данных из PHP (с использованием объектно-ориентированного подхода) в Javascript с помощью Ajax (json_encode), что я успешно сделал. Проблема, однако, в том, что значения, которые находятся внутри переменной $ data, печатаются в моем теге body с огромным пробелом после него.

На стороне сервера:

<?php
require_once "Database.php";
Class Product extends Database
{  
    public function getAllProducts(){
    $sql = $this->connectDB()->query("SELECT * FROM product");

    while($row = $sql->fetch()) {
            $data[] = $row;
    }
    echo json_encode($data);        
}
}

$p = new Product();
$p->getAllProducts();
?>

Сторона клиента:

$(function() {
    getProductData();
});

function getProductData(){
    $.ajax({
        url: "Product.php",
        type: "get",
        dataType: "json",
        success: successAjax,
        error: errorAjax,
        complete: function(xhr, status) {
            console.info(xhr);
            console.info(status);
        }
    });
}
function successAjax($jsonarray){
    console.info($jsonarray);
}

Вывод (обратите внимание, что теги тела не выводятся):

<body>
    "[{"id":"1","0":"1","name":"john","1":"john"}, 
     {"id":"2","0":"2","name":"bob","1":"bob"}]"
</body>

Есть ли способ запретить echo json_encode печатать данные в HTML, если все, что я хочу сделать, это передать его с PHP на javascript?

Не могли бы вы поделиться полным кодом из Product.php? У вас остался HTML-текст на Product.php.

Rinsad Ahmed 15.09.2018 17:31

Вместо этого вы можете указать это: return json_encode($data); Также вам может потребоваться сохранить возвращаемое значение в переменной.

enxaneta 15.09.2018 17:32

@RinsadAhmed Я отредактировал сообщение, включив в него весь Product.php. Вот и все.

Mairis 15.09.2018 17:33

@enxaneta return json_encode($data) возвращает Object "parsererror" SyntaxError: Unexpected end of JSON input

Mairis 15.09.2018 17:35

так что вы получаете только дополнительный тег <body>?

Rinsad Ahmed 15.09.2018 17:46

Попробуйте добавить die; после вашего эха. Также убедитесь, что ваш JSON действительный. Что выводит console.info?

Mtxz 15.09.2018 17:48

@RinsadAhmed У меня нет лишних тегов. Проблемной частью являются данные, которые вставляются в этот тег <body>. Я хочу, чтобы данные были доступны только на стороне клиента, но вместо этого кажется, что echo json_encode($data) печатает данные в формате html.

Mairis 15.09.2018 17:54

Это мой вопрос. Когда вы выводите json_encode ($ data), несет ли он ведущий тег тела? Не могли бы вы поделиться полным результатом?

Rinsad Ahmed 15.09.2018 17:57

@RinsadAhmed Фактический результат - это массив. Однако проблема не в этом. Проблема в том, что он вообще напечатан. Все, что я хочу добиться, это передать массив со стороны сервера (php) на сторону клиента (javascript). Проблема, однако, в том, что переданный массив также печатается в формате html, чего я не хочу.

Mairis 15.09.2018 18:27

@Mtxz добавление die останавливает выполнение остальной части кода. Также на выходе консоли нет ничего. Я почти уверен, что JSON действителен, так как иначе ajax не выводил бы его на консоль, верно?

Mairis 15.09.2018 18:30

Согласно вашей заметке тег <body> не выводится. Остальное - это строка json. Где вы видите HTML?

Rinsad Ahmed 15.09.2018 19:21

@RinsadAhmed Проблема здесь в том, что помимо возврата строки json что-то в моем коде заставляет всю строку автоматически печататься на моей странице. Клиентская сторона получает данные от json_encode, и я могу вывести их в свою консоль. Все это нормально. Проблема в том, что он тоже отображается на моей странице. Есть ли способ предотвратить это?

Mairis 15.09.2018 19:31

Каков остальной код? Отправка json должна быть концом вашего процесса, как видно из вашего кода

Mtxz 15.09.2018 20:18

@Mtxz Ну, CSS перестает работать, и все теги после bodytag исчезают. Однако массив все еще отображается на моей странице.

Mairis 15.09.2018 20:32

Я не понимаю ... Ваш запрос Ajax должен быть независимым от php, отображающего страницу. Один маршрут / сценарий для вашей страницы и один для вашего асинхронного запроса.

Mtxz 15.09.2018 20:33

@Mtxz По сути, это то, что происходит с die (); prntscr.com/kusr9q

Mairis 15.09.2018 20:43

Я не понимаю, что вы делаете. Как я вам говорю, сценарий php, возвращающий json в jquery Ajax, должен быть независимым от сценария php, возвращающего html. Итак, один скрипт отображает HTML. В этом html jquery вызовет Ajax другой скрипт / URL-адрес php, который возвращает json. Затем jquery может распечатать json в html или что-нибудь еще.

Mtxz 15.09.2018 20:50

@Mtxz Но ведь они независимы, не так ли? Единственное взаимодействие между ними - вызов Ajax и echo json_encode();.

Mairis 15.09.2018 21:02

Так как умереть; в php-скрипте, возвращающем json, разрывает html, который обрабатывается другим скриптом?

Mtxz 15.09.2018 21:03

@Mtxz О, спасибо, думаю, я исправил. Проблема заключалась в <?php include "Product.php" ?> вверху страницы. Похоже, это была та часть, которая сделала его зависимым от файла Product.php. Большое вам спасибо и извините за потраченное время.

Mairis 15.09.2018 21:14

Отлично. И да, сценарий PHP, обрабатывающий запрос ajax, не должен быть включен в сценарий PHP, обрабатывающий HTML. Рад, что ты это сделал!

Mtxz 15.09.2018 23:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
21
37
1

Ответы 1

Попробуйте сначала отправить HTTP-заголовок json на product.php

header('Content-Type: application/json');

Это заставляет list.php (это имя моей главной страницы) открывать исходный код страницы. По сути, страница действует так, как если бы я нажал правой кнопкой мыши -> Просмотреть исходный код страницы.

Mairis 15.09.2018 19:35

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