2011-12-31 55 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