2009-12-16 48 views
0

我想用jquery ajax調用php來執行一些數據庫事情,然後返回2個鏈接列表。所以我必須將這兩個鏈接列表傳遞迴jquery,以便它可以顯示頁面左側的列表1和右側的列表2。返回帶有html字符的json字符串?

我在單獨的數組中創建了列表,我用json_encode發送回jquery,但我注意到它轉義了所有的html字符。

<a>dog</a> became <a>dog<\/a> 

所以,當我在html中顯示列表,他們werent鏈接了。

我該如何保存我返回的數組中的html代碼爲jquery?

編輯:這是正確的路要走,如果你想分裂從PHP的數據,使jQuery可以顯示他們在不同的位置在HTML?

// list 1 
while($row = mysqli_fetch_assoc($saved_tags)) 
{ 
    $display_saved_tags[] = "<a id='showtag' href='answer.php?id=" . $row['id'] . "'>" . $row['name'] . "</a><br />"; 
} 

// list 2 
while($row = mysqli_fetch_assoc($related_tags)) 
{ 
    $display_related_tags[] = "<a id='showtag' href='answer.php?id=" . $row['id'] . "'>" . $row['name'] . "</a><br />"; 
} 

// return lists to jquery 
echo json_encode('display_saved_tags' => $display_saved_tags, 'display_related_tags' => $display_related_tags)); 
+0

這將是一件PHP事情。你可以發佈你的實際PHP代碼,以便人們可以看到你是如何調用'json_encode'? – 2009-12-16 11:53:13

回答

6

json_encode的轉義字符直接與HTML輸出衝突。我有同樣的問題,但當時決定使用替代解決方案。我只是有一個想法,你也許可以做到這一點:

$data = new stdClass(); 
$data->html1 = base64_encode('<h1>html in here</h1>'); 
$data->html2 = base64_encode('<p><strong>more html</strong></p>'); 
echo json_encode($data); 

在前端:

callbackFunction(json) { 
    alert(base64_decode(json.html1)); 
    alert(base64_decode(json.html2)); 
} 

你會需要它,可以發現BASE64_DECODE和utf8_decode的JavaScript實現: http://phpjs.org/functions/base64_decode:357

+0

我認爲它在base64和utf8中的代碼有問題。它說這些功能在我使用它時沒有聲明。當我用netbeans調試函數的時候,似乎do {}被破壞了。刪除它使聲明的功能......你的計算機中有代碼嗎?不知道如何解決它.. – ajsie 2009-12-16 12:29:36

+0

它沒有錯的代碼,它工作時,我把它在jQuery文檔準備功能以外。它的工作就像一個魅力! – ajsie 2009-12-16 12:37:08

0

使用可以使用以下功能來讀取或發送到瀏覽器時,未逃脫字符:因爲你正在使用json_encode

html_entity_decode('your response here'); 

此外,請確保您不需要在您的代碼下面的功能:

json_decode 
+0

我在php文件中使用了這個:echo html_entity_decode(json_encode($ display_saved_tags)); 但它的奇怪,它仍然逃到狗<\/a>。我可以在螢火蟲中看到它。 – ajsie 2009-12-16 12:04:39