通过ajax返回大量的html(带有几个变量)?

时间:2011-12-12 16:04:20

标签: php javascript ajax

我在大型数据库中搜索关键字的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评估的变量?

2 个答案:

答案 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”。