我构建了一个事件来更改与 ajax 和 json 编码混淆的产品名称
<div class="new-product-name"></div>
<div class="new-product-num"></div>
那么脚本就是
$(function(){
$.ajax({
method: "POST",
url: "fetch-product.php",
data: {keyword: 12}
}).done(function(msg){
$(".new-product-name").html(msg);
$.getJSON("fetch-product.php", function(data) {
$(".new-product-name").html(data.a);
$(".new-product-num").html(data.b);
});
});
});
在 fetch-product.php
$query = "SELECT * FROM `product_details` WHERE id='". $_POST['keyword']."'";
$result = $conn->query($query);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$name=$row["p_name"];
$num=$row["num"];
}
echo json_encode(array("a" => $name, $num));
即使在 $(".new-product-name").html(msg);
中也可以正确获取产品详细信息,它显示 '{"a":"Product1", "b":"22"}'
, 进入$.getJSON("fetch-product.php", function(data) { }
但是 data.a
, data.b
显示null
。
为什么 data.a
, data.b
null
?我花了太多时间。请帮助解决这个错误。
最佳答案
我认为没有理由对 PHP 脚本进行 2 次调用。
如果添加 dataType:json
参数,jQuery 将期望从 PHP 返回一个 JSONString,并且 msg
将自动转换为 javascript 对象。
$(function(){
$.ajax({
method: "POST",
dataType: "json", // new param
url: "fetch-product.php",
data: {keyword: 12}
})
.done(function(msg){
if ( msg.status == 1 ) {
$(".new-product-name").html(msg.a);
$(".new-product-num").html(msg.b);
} else {
$(".new-product-name").html(msg.info);
}
});
});
调用 $.getJSON("fetch-product.php",.....
的另一个问题是这会发出 GET 请求,因此填写 带有任何参数的 $_GET
数组。您的 PHP 代码没有查找在 $_GET
数组中传递的参数!
您的 PHP 代码原样容易受到 SQL 注入(inject)攻击,因此我修改了它以使用参数化和准备好的语句。
您还需要考虑您的查询未找到任何内容的可能性,并返回一些内容让 javascript 知道这一点。
$query = "SELECT * FROM `product_details` WHERE id=?";
$stmt = $conn->prepare($query);
$stmt->bind_param('i', $_POST['keyword']);
$result = $stmt->execute();
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
echo json_encode(array( 'status'=> 1,
'a'=>$row["p_name"],
'b'=>$row["num"]);
} else {
echo json_encode(array('status'=>0,
'info'=>'No data found');
}
关于javascript - JSON 编码在 ajax 函数中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43844279/