使用JSON发送带有分配给它们的函数的变量

时间:2016-10-27 19:49:06

标签: php jquery json

我正在尝试将我创建的日期函数添加到我用PHP发回的JSON数据中。我无法弄清楚如何在我单独的php文件中正确分配函数并发回。该功能在我的主页面(评论页面)而不是在这个php文件中。

但是,在我的主评论页面上,当不使用JSON(只是一个普通的PHP SELECT查询时,该函数运行正常。

我在我的评论页面(没有问题的页面)上这样做:

$comment_array[] = $comment_date;
echo '<div class="comment-post-date">'.fixDate($comment_date). '</div>';

这是我尝试在发回的php文件中执行此操作的方法。它实际上是在控制台中出错:

意外的令牌&lt;

我尝试将其指定为变量,然后将其发回:

$html .= '<div class="comment-post-date">'.$fixed_comment_date. '</div>';

完整代码:

if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
    $select_comments_stmt->execute();
    $rows = $select_comments_stmt->fetchAll(PDO::FETCH_ASSOC);
    $comments = array();
    foreach ($rows as $row) {
        $comment_date = $row['date'];
        $fixed_comment_date = fixDate($comment_date);
        $html = "";
        $html .= '<div class="comment-post-box" id="comment-'.$row['id'].'">';
        //$html .= '<img class="home-comment-profile-pic" src="'.$row['img'].'">';
        $html .= sprintf(
            '<img class="home-comment-profile-pic" src="%s">',
            empty($row['img']) ? 'profile_images/default.jpg' : $row['img']
        );
        $html .= '<div class="comment-post-info-block">';
        $html .= '<div class="comment-post-username">'.$row['username']. '</div>';
        $html .= '<div class="comment-post-date">'.$fixed_comment_date. '</div>';
        $html .= '</div>';
        $html .= '<div class="comment-post-text">'.$row['comment']. '</div>';
        $html .= '</div>';
        $data = array('id' => $row['id'], 'date' => $row['date'], 'html' => $html);
        $comments[] = $data;
    }
}
echo json_encode($comments);

我有什么想法可以让它发挥作用吗?

2 个答案:

答案 0 :(得分:3)

Unexpected token <通常意味着您的脚本没有输出 JUST json。它输出html + json,这是非法的JSON。

如果您正在请求将JSON作为响应,那么除了实际的json响应之外的任何OTHER输出都将被视为JSON语法错误。

e.g。

echo '<div>blahblalblah</div>';
echo json_encode($whatever):

会导致意外的令牌错误,因为<行中的第一个<div>已经是JSON语法错误。

这也意味着输出的PHP警告/错误之类的内容也将成为响应的一部分,并且还会触发语法错误。

答案 1 :(得分:0)

你不应该只使用json HTML代码来获取mysql结果,例如

$comments['id'][] = $row['id'];
$comments['username'][] = $row['username'];
//next one
//next one
//next one
echo json_encode($comments);

在JS代码中:

var count = json.id.length;

for(var i = 0; i<count; i++)
{
   var id = json.id[i];
   var username = json.username[i];
}