2016-10-27 104 views
0

我正在嘗試將我創建的日期函數添加到我使用PHP發回的JSON數據中。我無法弄清楚如何在我單獨的php文件中正確地分配函數併發回。該功能是在我的主頁(評論頁),而不是在這個PHP文件。發送帶有JSON函數的變量

然而,我的主要評論頁面上,不使用JSON(只是一個普通的PHP SELECT查詢時,函數工作就好了。

我這樣做,我的評論頁面上(該頁面沒有問題),像這樣:

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

這是我嘗試做它發回的時候不工作的PHP文件它實際上是給了一個錯誤的控制檯:

意外標記<

我試圖把它分配爲變量,然後將其發回,因爲這:

$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); 

任何想法如何,我能得到這個工作?

+0

我沒有看到一個問題與分配給'$ HTML版本='。你在那裏遇到什麼問題? – Barmar

+0

如果您要返回JSON,則腳本中不能包含任何其他'echo'語句。但看起來你修正了當你刪除'echo'

';'而是分配給'$ html'的情況。 – Barmar

+0

對。它只是打破了查詢,並沒有從這一點選擇評論。在我嘗試添加函數到代碼工作正常的日期之前。 – Paul

回答

3

Unexpected token <通常表示您的腳本沒有輸出JUST json。它輸出html + json,這是非法的JSON。

如果您要做的是預期將JSON作爲響應的請求,那麼除實際的json響應之外的任何其他輸出將被視爲JSON語法錯誤。

例如

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

會導致你意外的標記錯誤,因爲在<div>行的第一個<已經是一個JSON語法錯誤。

這也意味着輸出的PHP警告/錯誤等內容也會成爲響應的一部分,並且還會觸發語法錯誤。

+0

我之前的所有其他html div語句都可以工作。這只是當我修改我的日期行來嘗試幷包含我的fixDate函數。 – Paul

+0

然後查看腳本的RAW輸出以查看任何php警告/錯誤。即使你自己沒有明確地輸出一些東西,糟糕的代碼仍然會導致輸出破壞你的json。 –

+0

這是發回我的意見頁面致命錯誤:調用未定義的函數fixDate()'。我試圖添加這個php文件,嚴格來說是選擇評論和他們的數據。我應該在這個頁面上添加該功能嗎? – Paul

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]; 
}