javascript - 获取单个记录输出的内容多于记录内容,并且 json.parse 未记录正确的数据

标签 javascript php json ajax

我设置了一个名为触发器的新表。我正在做的是建立一个简单的二进制系统来触发显示或不显示的内容。下面的代码来 self 刚刚尝试执行此操作的代码。

我在使用下面的代码时遇到了两个问题。

  1. echo json_encode 实际上是回显到文件页面上。我以前从未发生过这种情况,所以我不确定为什么会这样。

回显的结果是这样的:

{"specialPopStatus":{"setting":"1","0":"1"}}

唯一应该显示的数字是1。我不明白尾随的 0 和 1 来自哪里。

enter image description here

  • JSON.parse 的 console.log 结果是 [object Object]。我不明白为什么(至少)1、0 和 1 没有输出。
  • 最终,我想要的只是数据库中我用名称指示的单个记录的设置结果。然后我想通过我的 ajax 函数获取这条记录。它总是 0 或 1。

    我做错了什么?

    PHP

    try {
        $con = getConfig('pdo');
        $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $special_pop_sql = "
            SELECT setting
            FROM triggers
            WHERE trigger_name = 'Special Pop'
            LIMIT 1
        ";
    
        if ($special_pop_stmt = $con->prepare($special_pop_sql)) {
            $special_pop_stmt->execute();
            $special_pop_row = $special_pop_stmt->fetch();
        }
    }
    catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }
    
    echo json_encode(['specialPopStatus' => $special_pop_row]);
    

    JS

    var status2 = 0;
    function ajaxSpecialPopTrigger() {
        $.ajax({
            url: '/php/triggers.php',
            datatype: 'json',
            success: function (data) {
                obj = JSON.parse(data);
    
                specialPopStatus = obj.specialPopStatus;
                status2 = specialPopStatus;
                console.log(status2 + ' This is the status');
            }
        });
    }
    ajaxSpecialPopTrigger();
    

    编辑 - 新的 JS:

    var status2 = 0;
    function ajaxSpecialPopTrigger() {
        $.ajax({
            url: '/php/triggers.php',
            datatype: 'json',
            success: function (data) {
                //obj = JSON.parse(data);
    
                //Catalog Requests
                specialPopStatus = data.specialPopStatus;
                status2 = specialPopStatus;
                console.log(status2 + ' This is the status');
            }
        });
    }
    ajaxSpecialPopTrigger();
    

    最佳答案

    json字符串中出现额外数据的原因是你使用了

    $special_pop_row = $special_pop_stmt->fetch();
    

    默认返回一个关联数组一个数值数组,请注意,两种情况下的数据值为1

    所以通过做这个小模组来解决这个问题

    $special_pop_row = $special_pop_stmt->fetch(PDO::FETCH_ASSOC);
    

    也在 javascript 中,因为你已经给出了

    datatype: 'json',
    

    作为参数,你不必解析 json,因为 jQuery 会为你做这件事

    所以要编写javascript代码

    var status2 = 0;
    function ajaxSpecialPopTrigger() {
        $.ajax({
            url: '/php/triggers.php',
            datatype: 'json',
            success: function (data) {
                //obj = JSON.parse(data);
    
                specialPopStatus = data.specialPopStatus;
                //status2 = specialPopStatus;
                console.log(specialPopStatus + ' This is the status');
            }
        });
    }
    ajaxSpecialPopTrigger();
    

    关于javascript - 获取单个记录输出的内容多于记录内容,并且 json.parse 未记录正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054993/

    相关文章:

    java - 有什么方法可以有效地检查提供的 jsonObject 中是否缺少任何 key ?

    javascript - 在加载时向上滑动 DIV,在单击时向下滑动

    javascript - HTML 和 JavaScript。为什么我的代码不起作用

    javascript - Redux-form - 有没有办法知道哪些字段已更改? (更新和补丁)

    PHP:超出最大执行时间 0

    javascript - Jquery addClass 和 removeClass onclick() 不适用于 fontawesome

    php - 雅虎通过管道将 JSON 传输到数据库

    javascript - 必须刷新页面才能从 api 获取数据

    php - 如何使用 mysqli group_concat 创建嵌套 JSON?

    ios - 无法在 Collection View 中加载数据?