如何在使用CI进行ajax调用后传回html和逻辑信息

时间:2013-10-06 19:32:07

标签: json codeigniter jquery

我有一个基于CI和jQuery的项目。我有一个网站搜索我的数据库。它由一个jQueryUI手风琴组成。一个部分包含高级搜索的输入字段,另一个部分用于显示带结果的html表。

使用ajax post将第一部分中的搜索参数发送到服务器。这是由服务器和一个html样式的错误消息或带有结果的html表(以及后来的其他一些东西,如发现了多少结果,消耗了多少时间等)的问题。

回到客户端jQuery必须能够区分这两者。最好的是能够传输另一个变量'search_success'。如果'search_success'为false,则错误将被添加到输入字段上方的第一部分。否则,html块将显示在第二部分中,jQuery将打开第2部分。

现在我正在返回带有0或1前置的普通html。这个第一个字符被jQuery删除并用于区分两个可能的结果。这有点难看。

阅读这篇文章about sending array using json后,我想到了在json中解决这个问题。 我打算建立类似

的东西

echo json_encode(array('search_success' => $search_success, 'html' => $html));

这样可以很好地构建数据。现在的问题是,我的'html'不是一个简单的php变量,而是一个视图:

<?php 
$template = array('table_open' => '<table id="table" data-url="'.base_url().'">');
$this->table->set_template($template);
$this->table->set_heading($table_header);
echo $this->table->generate($table);
?>

这种观点也可能变得更加复杂。当然我可以放弃CI MVC并将整个html存储在一个php字符串中,我可以使用上面的代码将其转换为json。但是,这会破坏在视图中存储整个html部分的目的。

有没有办法在不放弃我的视图架构的情况下将我的整个视图包装在json中? 或者哪种方法更适合这个问题?

谢谢,singultus

1 个答案:

答案 0 :(得分:0)

为了结束这个话题,答案很简单:

$json['html'] = $this->load->view('myfile', '', true); // 3. param 'true'!
$json['other_stuff'] = $other stuff;
echo json_encode($json);

here at the very end。这种方法允许对服务器进行良好结构化的响应。

归功于@koala_dev!