我有一个调用php文件的ajax调用,该文件运行一个长PHP函数,该函数返回一个JSON编码的数组/对象。现在我需要将HTML也发送到ajax响应中。我想过在数组中发送HTML。
这是一个好习惯吗?
现在我无法正常工作,我获得NULL
作为该属性的值。不知道为什么。
$statHTML = '<table>';
foreach ($toHTML as $key=>$value) {
$statHTML.= '
<tr class="'.$key.'">
<td class="side">'.$value[0].'</td>
<td>'.$value[2].' '.$value[1].'</td>
</tr>';
}
$statHTML.= '</table>';
// echo $statHTML; // - this works
//function return
$answer = array('mostSearched'=>$mostSearched,
'timeOfDay' => $timeOfDay,
'mostSearchedDays'=>$mostSearchedDays,
'statHTML' => $statHTML
);
return json_encode($answer);
JSON.parse()
之前来自控制台的ajax响应:
{
"mostSearched": {
"title": "Most serached houses",
"colNames": [21],
"rowNames": [2013],
"rows": [1]
},
"timeOfDay": {
"title": "Time of search",
"colNames": ["07:30"],
"rowNames": ["07:30"],
"rows": [
[1]
]
},
"mostSearchedDays": {
"title": "Most searched days",
"colNames": ["2013-12-21", "2013-12-22", "2013-12-23", "2013-12-24", "2013-12-25", "2013-12-26", "2013-12-27"],
"rowNames": ["2013-12-21", "2013-12-22", "2013-12-23", "2013-12-24", "2013-12-25", "2013-12-26", "2013-12-27"],
"rows": [
[1, 1, 1, 1, 1, 1, 1]
]
},
"statHTML": null
}
答案 0 :(得分:8)
来自php.net:
<强>参数强>
<强>值强>
正在编码的值。可以是除资源之外的任何类型。
所有字符串数据必须采用UTF-8编码。
所以使用:
$answer = array('mostSearched'=>$mostSearched,
'timeOfDay' => $timeOfDay,
'mostSearchedDays'=>$mostSearchedDays,
'statHTML' => utf8_encode($statHTML)
);
return json_encode($answer);
答案 1 :(得分:1)
PHP使用的内置JSON解析器很可能无法正确解析HTML,解决问题的最简单方法是在服务器上对html进行base64编码,然后使用较新的{在客户端上对其进行解码{1}}和atob
base64方法,或其中的众多polyfill之一。
答案 2 :(得分:0)
在转换时使用base64_enccode
$answer = array('statHTML'=>base64_encode('<h1>html in here</h1>'));
echo json_encode($answer);exit;
在收到ajax的回复时
atob(response.statHTML);
希望你了解它是如何运作的