2011-12-31 45 views
-3

我在PHP中創建了一個包含大量HTML的表。一旦創建,我贊同它作爲一個JSON字符串是這樣的:通過JSON返回HTML不起作用

echo json_encode($array['table']); 

然後我用jQuery.parseJSON(returnString);並嘗試將其附加到一個div。這隻適用於我返回一個字符串。當我發送HTML時它不起作用(在這種情況下根本沒有返回)。

誰能告訴我發生了什麼問題嗎?在發送給jQuery之前,我需要使用一些函數來解析\/" '符號嗎?

編輯:

$arr['table']看起來是這樣的:

$arr['table'] = "<tr class=\"{$id}\">lalalal</tr>" 

我的JSON是這樣的:

\n\t\t\t\t\t</div>\n\t\t\t\t\tfcds\n\t\t\t\t\t</center>\ 
+0

你的JSON是什麼樣的? – 2011-12-31 02:11:43

+0

@AymanSafadi:更新。 – 2011-12-31 02:12:06

回答

6

你不應該通過JSON發送HTML數據,而只是「數據」,然後使用JavaScript來創建新的HTML元素,並修改這些新的DOM元素。

一個jQuery的例子:

var json_doc = $.getJSON('http://yourservice.com/yo/'); 
var tr = $(document.createElement('tr')); 
tr.attr('id', json_doc.responseText.id); 
tr.html(json_doc.responseText.html); 
$('table').append(tr); 

你從你的反應會http://yourservice.com/yo/是:

{id: 1, html: "lalalal"} 
+0

「你不應該通過JSON發送HTML數據」 - 爲什麼? – 2011-12-31 02:18:14

+0

因爲HTML不是JavaScript對象。我的意思是,如果你真的想要,你可以返回'{html:' lalalal'}'並且隨時附加到你的桌子上,但想一想 - 如果你改變了你的模板,你就改變了你的代碼也是如此。如果您只是在JSON響應中提供數據,則需要更新的是模板和JavaScript,但請保留服務器端代碼。這是關於乾淨地將視圖與控制器,模型等分開。查看MVC應用程序設計。 – tkone 2011-12-31 02:22:10

+0

哦,而且,如果你這樣做,你也不會有這個問題:) tkone 2011-12-31 02:23:16

1

我認爲你只是需要將其發送到之前轉義特殊字符JQ。我通常使用這個庫http://phpjs.org/functions/htmlspecialchars:426來編碼特殊字符...

+0

我試過了,沒有幫助。 – 2011-12-31 02:14:14

+0

也許它是斜槓?試過兩次逃跑? \\ – 2011-12-31 02:18:45

0

我發現了一個錯誤,如果我可以把它這樣。在我將\"{$id}\"更改爲'{$id}'之後,它就可以工作了。

3

說明

由於@tkone指出:你不應該通過JSON被髮送HTML數據,這不是它的目的。
這是可以做到的,但不應

要麼你輸出所有的HTML,並做服務器頁面上的所有的處理,並返回它作爲HTML
像這樣

PHP (server_page.php)

//Connect 
$link = mysql_connect($server, $user, $password); 
//Select 
mysql_select_db($db, $link); 
//Query 
$result = mysql_query($query); 

$data = $_GET['some_data']; 

//Loop 
echo "<table id='$data'>"; 
while($row = mysql_fetch_array($result)){ 
    echo "<tr>"; 
    foreach($row as $key => $value){ 
     echo "<td>$value</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 

//Cleanup 
mysql_free_result($result); 
mysql_close($link); 

的Javascript

var data = {"some_data": "Foobar"}; 
$.get("server_page.php", data, function(response){ 
    $("#output").html(response); 
}); 

或者,你輸出爲JSON的信息,數據,然後可以在Javascript
處理像這樣

PHP(server_page。PHP)

//Connect 
$link = mysql_connect($server, $user, $password); 
//Select 
mysql_select_db($db, $link); 
//Query 
$result = mysql_query($query); 
$num_result = mysql_num_rows($result);  

$data = array(
    "mysql_data" => array(), 
    "num_result" = $num_result 
); 

//Loop 
while($row = mysql_fetch_array($result)){ 
     $data['mysql_data'][] = $row; 
} 

echo json_encode($data); 
//Cleanup 
mysql_free_result($result); 
mysql_close($link); 

的Javascript

$.getJSON("server_page.php", function(data){ 
    alert("Number of rows returned from query: "+data.num_result); 
}); 

但你不應該混合兩種不同的方法。你必須決定你在哪裏處理所有的邏輯,並在那裏傳遞你需要的所有數據。


解決方案

正如你指出的那樣,

"<tr class=\"{$id}\">lalalal</tr>" 

是不正確的JSON。

應該

"<tr class='{$id}'>lalalal</tr>" 

所有JSON具有共享相同的報價符號,即如果使用​​或' "" '

我建議你在服務器端做所有的邏輯。您可以隨時通過POST或GET發送您的Javascript中的一些數據。這兩種方式你知道。

+0

upvote是一個更完整的例子,如何解決這個問題 – tkone 2011-12-31 15:20:53