javascript - JSON 编码在 ajax 函数中无法正常工作

标签 javascript php jquery json ajax

我构建了一个事件来更改与 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/

相关文章:

javascript - 将字符串转换为链接 - javascript

javascript - 带有基于输入值的前缀名称的 jQuery addClass

php - 控制别人的窗口屏幕

javascript - 来自 react-native-elements 的样式卡 : Align Title and icon vertically

javascript - 如何在 Three.js 模型上绘图?

javascript - Rails POST 链接与 Bootstrap 工具提示

php - MySQL 子查询未返回预期结果

php - 如何正则表达式匹配具有不同结尾的文本?

php - 带有 AND 运算符的正则表达式 mysql

javascript - HTML bootstrap popover 函数