【发布时间】: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'=> true, 'message' => "..."并检查在 js 中为if(data.error)
标签: javascript php jquery json