通过JSON返回HTML不起作用

时间:2011-12-31 02:05:05

标签: php javascript jquery json

我在PHP中创建了一个包含大量HTML的表。创建之后,我将其作为JSON字符串回显:

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>\

4 个答案:

答案 0 :(得分: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"}

答案 1 :(得分: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的一些数据。这两种方式都是你知道的。

答案 2 :(得分:1)

我认为你需要在将它发送到jq之前转义特殊字符。我通常使用这个lib http://phpjs.org/functions/htmlspecialchars:426来编码特殊的字符......

答案 3 :(得分:0)

如果我可以这样称呼,我发现了一个错误。我将\"{$id}\"更改为'{$id}'之后就有效了。