【问题标题】:How to make a json_encode returned object into a javascript variable如何将 json_encode 返回的对象转换为 javascript 变量
【发布时间】:2019-12-05 14:47:06
【问题描述】:

我将 json_encode 对象返回给 ajax 调用。首先,有没有更好的方法来做到这一点?这是json_encode needed?

我的问题的根源。当我尝试将键设为变量时,它会引发“未定义错误”。本行:var displayTriggers = trigger_rows;

有人看到我做错了吗?

PHP:

try {
    $con = getConfig('pdo');
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql_triggers = "
        SELECT *
        FROM triggers
    ";
    $triggers_stmt = $con->prepare($sql_triggers);
    $triggers_stmt->execute();
    $triggers_rows = $triggers_stmt->fetchAll(PDO::FETCH_ASSOC);
    $triggers_arr = array();
    foreach ($triggers_rows as $triggers_row) {
        $trigger_id = $triggers_row['id'];
        $trigger_title = $triggers_row['trigger_name'];
        $trigger_setting = $triggers_row['setting'];
        $trigger_user = $triggers_row['user_id'];
        $trigger_placement = $triggers_row['placement'];
        $trigger_date = $triggers_row['date_changed'];
        $trigger_active = ( $trigger_setting == '1' ) ? ' active' : '';
        $html = '';
        $html .= '<div class="triggerRow" data-placement="'.$trigger_placement.'">';
        $html .= '<div class="triggerRowLeft">';
        $html .= '<div class="triggerTitle">' . $trigger_title . '</div>';
        $html .= '<div class="triggerText">' . $trigger_date . '</div>';
        $html .= '<div class="triggerText">' . $trigger_user . '</div>';
        $html .= '</div>';
        $html .= '<div class="triggerRowRight">';
        $html .= '<div class="triggerButton' . $trigger_active . '"></div>';
        $html .= '</div>';
        $html .= '</div>';
        $data = array('html' => $html);
        $triggers_arr[] = $data;
    }
    echo json_encode(['trigger_rows' => $triggers_arr]);
}
catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

JS:

$wrapper = $('#triggerCont');
$.ajax({
    url: 'php/triggerSelect.php',
    dataType: 'json',
    success: function (data) {
      //console.log(data);
        if (data == null) {
            alert("Unable to retrieve triggers!");
            alert(data);
        } else {
            var displayTriggers = trigger_rows;
            $wrapper.empty();
            $(displayTriggers).each(function() {
                $wrapper.append(this.html);
                //console.log(this.html);
            });
        }
    },
    error: function (xhr, textStatus, errorThrown) {
        alert(textStatus + " | " + errorThrown);
        alert('There are currently no project images for this selection');
    }
});

【问题讨论】:

  • 您从success: function (data) 获得一个名为data 的变量中返回给javascript 的数据,因此请尝试使用data. 而不是trigger_rows
  • 简单的调试想法。所有浏览器都带有调试器 (F12)。加载它并在if (data == null) { 上设置断点,然后检查对象data 实际包含的内容
  • @RiggsFolly 这难道不是一个突破点吗? alert(data);data == null 语句中?
  • 它向您显示数据,并在执行此操作时停止代码执行。但是由于您不在调试器中,因此您无法决定逐行执行代码,这也是发现我们所有人都犯的那些小问题的好方法
  • @Paul btw alert(data)data === null 毫无意义时,因为它会警告 null ;-) 如果你想调试你的 db-php,只需返回编码的 json 就像:'error'=&gt; true, 'message' =&gt; "..." 并检查在 js 中为if(data.error)

标签: javascript php jquery json


【解决方案1】:
var displayTriggers = data.trigger_rows;

应该做的伎俩

【讨论】:

  • 明白了!我什至没有想过这个。我以前是解析数据并使用obj的,所以习惯了这种方法。
  • 明白了!下次只需检查注释掉 console.log(data) 的控制台输出,当您将 dataType 选项设置为 json 时,它会自动将字符串转换为 json(json 已经是一个 js 对象“字符串化 json”只是文本)
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多