Я пытаюсь создать обратный вызов JSON. Я получил два файла, json.html и json.php. Кроме того, у меня есть база данных с таким:

Type: MySQL
DB Name: user_table
Table name: customers
Fields: id, name, product, supplier

Коды моего json.html:

<html>
<head>

</head>
<body>

<div id="demo" style="font-size: 20px;"></div>

<script>

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myObj = JSON.parse(this.responseText);
        for (x in myObj) {
            txt += myObj[x] + "<br>";
        }
        document.getElementById("demo").innerHTML = txt;
    }
};
xmlhttp.open("POST", "json.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);

</script>

</body>
</html>

И вот коды json.php:

<?php

$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "db";

header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_POST["x"], false);

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);

?>

Вот отчеты об ошибках:

Уведомление PHP: неопределенная переменная: таблица в /home/user/public_html/json/json.php в строке 7

Неустранимая ошибка PHP: невозможно получить доступ к пустому свойству в /home/user/public_html/json/json.php в строке 7

Уведомление PHP: неопределенный индекс: x в /home/user/public_html/json/json.php в строке 4 Уведомление PHP: неопределенная переменная: таблица в /home/user/public_html/json/json.php в строке 7

Уведомление PHP : попытка получить свойство необъекта в /home/user/public_html/json/json.php в строке 7

Уведомление PHP: неопределенная переменная: ограничение в /home/user/public_html/json/json.php в строке 7

Уведомление PHP : попытка получить свойство необъекта в /home/user/public_html/json/json.php в строке 7

Фатальная ошибка PHP: вызов функции-члена fetch_all () для необъекта в /home/user/public_html/json/json.php в строке 9

Как я могу заставить это работать?

0
Arashtad 8 Янв 2017 в 13:19

4 ответа

Лучший ответ

Как упоминалось в комментарии к Дэвиду, проблема была в fetch_all (). Я предполагаю, что проблема была в ресурсах сервера, потому что страница вернула 500 по вызову.

В любом случае я извлек требуемый массив, используя этот метод:

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT * FROM customers LIMIT 10");
$outp = array();    

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $outp[] = $result->fetch_array(MYSQLI_ASSOC);
}


echo json_encode($outp);

И это сработало.

Теперь я собираюсь заставить это работать с моим обратным вызовом JSON.

1
Arashtad Ltd 8 Янв 2017 в 12:38

Попробуйте заменить

$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);

С участием

$result = $conn->query("SELECT name FROM ".$obj->{'table'}." LIMIT ".$obj->{'limit'});
0
Jensui 8 Янв 2017 в 10:32

Попробуй вот так ...

В вашем JavaScript отправить объект ..

xmlhttp.send(obj);

В PHP:

<?php

$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "db";

header("Content-Type: application/json; charset=UTF-8");
extract($_POST); //Extracting 

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT name FROM ".$table." LIMIT ".$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);

print_r($outp);
echo json_encode($outp);

?>
0
Hek mat 8 Янв 2017 в 10:40

Похоже, JSON, который вы пытаетесь отправить, не попадает в скрипт PHP.

Некоторые вещи, которые я бы сделал:

  • Измените тип содержимого заголовка запроса на application / json (см. Этот https://stackoverflow.com/a/9880122/2315558 )
  • Проверьте, что х имеет значение, прежде чем пытаться его использовать
0
Community 23 Май 2017 в 12:16