我在大型数据库中搜索关键字的ajax函数。被调用的php只是说“不”,如果没有,但是如果找到记录,它会继续创建所有HTML并返回html,这样AJAX只需要将返回的文本放入div的html中。我的问题是我想传递几个变量,比如找到的记录数等等。
因此,如果我试图将其置于javascript可以评估的声明中,我担心不仅所有html都可能大到足以引起某种变量问题,而且它还有很多单一的和双引号等,它可能会意外地结束变量。请参阅以下
// (I know I don't have a single quote after data and that will break it. This is just an example
echo "{ status: 'success', total: '".count($relevance)."' data: ";
foreach ($relevance as $re) {
// tons of html is printed here
}
echo " }";
所以问题是,我如何最有效地发回一大堆html代码,以及一些可以轻易地被JS评估的变量?
答案 0 :(得分:4)
使用json_encode
这将消除您在尝试创建自己的json时可能遇到的任何错误。
$returnArray = array(
'status'=>'success',
'total' => count($relevance),
'data' => ''
);
foreach ($relevance as $re) {
$returnArray['data'] .= $re; // + all long html code
}
echo json_encode($returnArray);
答案 1 :(得分:1)
您可以将数据编码为JSON,然后将其放在具有非JavaScript类型的<script>
块中。为脚本提供一个类,以便您的代码可以轻松查找。然后,您可以获取<script>
元素的“.innerHTML”并解码JSON。然后,只需将<script>
添加到您要返回的HTML的其余部分。
编辑不要使用@ Neal的答案;这是一个不那么愚蠢的想法。我已经完成了我所描述的但通常是因为对于其他一些(框架)原因而言,直接获取它并不容易(或者只是不方便) 响应数据。此外,我通常通过JSP生成页面,因此将JSON放入页面比将页面内容放入Java更容易。
详细说明,这样的<script>
块:
<script type='text/json' class='some-data-for-you'>
{ "hello": "world" }
</script>
浏览器将忽略,因为“type”将不会被识别为代码。然后,您的JavaScript代码可以在返回的内容中查找带有“some-data-for-you”类的<script>
元素,然后使用JSON解析器解析“.innerHTML”。