Я пытаюсь передать таблицу базы данных из 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?
Вместо этого вы можете указать это: return json_encode($data); Также вам может потребоваться сохранить возвращаемое значение в переменной.
@RinsadAhmed Я отредактировал сообщение, включив в него весь Product.php. Вот и все.
@enxaneta return json_encode($data) возвращает Object "parsererror" SyntaxError: Unexpected end of JSON input
так что вы получаете только дополнительный тег <body>?
Попробуйте добавить die; после вашего эха. Также убедитесь, что ваш JSON действительный. Что выводит console.info?
@RinsadAhmed У меня нет лишних тегов. Проблемной частью являются данные, которые вставляются в этот тег <body>. Я хочу, чтобы данные были доступны только на стороне клиента, но вместо этого кажется, что echo json_encode($data) печатает данные в формате html.
Это мой вопрос. Когда вы выводите json_encode ($ data), несет ли он ведущий тег тела? Не могли бы вы поделиться полным результатом?
@RinsadAhmed Фактический результат - это массив. Однако проблема не в этом. Проблема в том, что он вообще напечатан. Все, что я хочу добиться, это передать массив со стороны сервера (php) на сторону клиента (javascript). Проблема, однако, в том, что переданный массив также печатается в формате html, чего я не хочу.
@Mtxz добавление die останавливает выполнение остальной части кода. Также на выходе консоли нет ничего. Я почти уверен, что JSON действителен, так как иначе ajax не выводил бы его на консоль, верно?
Согласно вашей заметке тег <body> не выводится. Остальное - это строка json. Где вы видите HTML?
@RinsadAhmed Проблема здесь в том, что помимо возврата строки json что-то в моем коде заставляет всю строку автоматически печататься на моей странице. Клиентская сторона получает данные от json_encode, и я могу вывести их в свою консоль. Все это нормально. Проблема в том, что он тоже отображается на моей странице. Есть ли способ предотвратить это?
Каков остальной код? Отправка json должна быть концом вашего процесса, как видно из вашего кода
@Mtxz Ну, CSS перестает работать, и все теги после bodytag исчезают. Однако массив все еще отображается на моей странице.
Я не понимаю ... Ваш запрос Ajax должен быть независимым от php, отображающего страницу. Один маршрут / сценарий для вашей страницы и один для вашего асинхронного запроса.
@Mtxz По сути, это то, что происходит с die (); prntscr.com/kusr9q
Я не понимаю, что вы делаете. Как я вам говорю, сценарий php, возвращающий json в jquery Ajax, должен быть независимым от сценария php, возвращающего html. Итак, один скрипт отображает HTML. В этом html jquery вызовет Ajax другой скрипт / URL-адрес php, который возвращает json. Затем jquery может распечатать json в html или что-нибудь еще.
@Mtxz Но ведь они независимы, не так ли? Единственное взаимодействие между ними - вызов Ajax и echo json_encode();.
Так как умереть; в php-скрипте, возвращающем json, разрывает html, который обрабатывается другим скриптом?
@Mtxz О, спасибо, думаю, я исправил. Проблема заключалась в <?php include "Product.php" ?> вверху страницы. Похоже, это была та часть, которая сделала его зависимым от файла Product.php. Большое вам спасибо и извините за потраченное время.
Отлично. И да, сценарий PHP, обрабатывающий запрос ajax, не должен быть включен в сценарий PHP, обрабатывающий HTML. Рад, что ты это сделал!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте сначала отправить HTTP-заголовок json на product.php
header('Content-Type: application/json');
Это заставляет list.php (это имя моей главной страницы) открывать исходный код страницы. По сути, страница действует так, как если бы я нажал правой кнопкой мыши -> Просмотреть исходный код страницы.
Не могли бы вы поделиться полным кодом из Product.php? У вас остался HTML-текст на Product.php.