我正在尝试创建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注意:未定义变量:第7行/home/user/public_html/json/json.php中的表
PHP致命错误:无法访问第7行/home/user/public_html/json/json.php中的空属性
PHP注意:第4行的/home/user/public_html/json/json.php中的未定义索引:x PHP注意:未定义的变量:第7行/home/user/public_html/json/json.php中的表
PHP注意:尝试在第7行的/home/user/public_html/json/json.php中获取非对象的属性
PHP注意:未定义变量:第7行/home/user/public_html/json/json.php中的限制
PHP注意:尝试在第7行的/home/user/public_html/json/json.php中获取非对象的属性
PHP致命错误:在第9行的/home/user/public_html/json/json.php中调用非对象的成员函数fetch_all()
我怎样才能让它发挥作用?
答案 0 :(得分:0)
尝试替换
$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);
与
$result = $conn->query("SELECT name FROM ".$obj->{'table'}." LIMIT ".$obj->{'limit'});
答案 1 :(得分:0)
试试这个......
在您的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);
?>
答案 2 :(得分:0)
看起来你要发送的JSON没有进入PHP脚本。
我会做的一些事情是:
答案 3 :(得分:0)
正如David对评论中所提到的,问题在于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回调。