尝试在Codeigniter中使用AJAX和设置视图文件的输出样式
Trying to style output from my view file in Codeigniter with AJAX and
型号
<?php if (! defined('BASEPATH')) exit('No direct script access');
class Ajax_model extends CI_Model
{
public function __construct()
{
$this->load->database();
}
public function search($data) {
$this->db->select('title');
$this->db->select('text');
$this->db->like('title', $data);
$query = $this->db->get('news', 10);
return $query->result_array();
}
}
?>
控制器
<?php
// application/controller/ajax.php
class Ajax extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('ajax_model');
}
public function getdata($param = '')
{
// Get data from db
$data['ajaxdata'] = $this->ajax_model->search($param);
$data['ajaxdata'] = json_encode($data['ajaxdata']);
$this->load->view('ajax/index', $data);
//echo $data['ajaxdata'];
}
}
?>
查看
<!-- application/views/ajax/index.php-->
<p><?=$ajaxdata?></p>
最后,在我的标题中,我的形式在哪里;我有我的JavaScript
<div id="searchresults"></div>
<script>
// This is the jQuery Ajax call
function doSearch()
{
$.ajax({
type: "GET",
url:"localhost/codeigniter/index.php/ajax/getdata/" + $("#mysearch").val(),
success:function(data){
$("#searchresults").html(data);
}});
}
</script>
也许我可以采取不同的做法?
我现在的结果是这样的
[{"title":"Cousy","text":"A very comfortable luxury double bed room"},{"title":"Romance","text":"This is a lovely room for couple on honey moon double bed"}]
它显示的记录正确,但在同一行。我希望它单独出现,并以href格式
您可以通过以下两种方式做到这一点:
1) 返回已使用结果格式化的视图文件。这显然在ajax响应中传输了更多的数据,因此速度较慢,但对于10个结果来说,这是可以忽略的,因为服务器上的PHP无论如何都会比JS更快地呈现视图。
2) 返回JSON,然后解析JSON并使用JS格式化响应。
方法1:
您的控制器将变为:
<?php
// application/controller/ajax.php
class Ajax extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('ajax_model');
}
public function getdata($param = '')
{
// Get data from db
$data['ajaxdata'] = $this->ajax_model->search($param);
$this->load->view('ajax/index', $data);
}
}
您的视图文件将变为:
<?php
if(!empty($ajaxdata)) {
foreach($ajaxdata as $item) {
echo '<h1>'.$item['title'].'</h1>';
echo '<p>'.$item['text'].'</p>';
}
}
?>
你的模型和形式会保持不变。
方法2:
您的控制器将变为:
<?php
// application/controller/ajax.php
class Ajax extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('ajax_model');
}
public function getdata($param = '')
{
// Get data from db
echo json_encode( $this->ajax_model->search($param) );
}
}
您可以删除视图文件。您的表格将变为:
function doSearch()
{
$.ajax({
type: "GET",
url:"localhost/codeigniter/index.php/ajax/getdata/" + $("#mysearch").val(),
success:function(data){
var results = $.parseJSON(data);
var html_str = '';
$.each( results, function( key, result ) {
html_str .= '<h1>'+result.title+'</h1><p>'+html_str+'</p>';
});
$("#searchresults").html(html_str);
}
});
}
如果这里有语法错误,我深表歉意。
使用<div>
或<span>
创建一些html,并使用javascript将结果格式化为正确的格式。一个例子是在显示div元素中javascript函数的结果
相关文章:
- 如何设置默认<ui视图>在另一<ui视图>
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- 如何在默认情况下将主干视图设置为singleton
- 在网格视图的自动刷新过程中,设置内部网格视图文本框的可见性
- 无法将对象列表从视图模型设置为 javascript 变量
- 设置子视图控制器 EmberJS
- 将单选按钮设置为签入jquery,而不将其显示为签入视图
- 更新后,父视图未在 Electron 中的
上设置全局变量 - 设置Sails js视图扩展不'不起作用
- 转换复选框'在'在发布到Django视图之前,将其设置为Boolean
- 如何设置默认视图位置(铯1.6)
- AngularJS:如何在设置了$scope.var之后才在视图中设置$scope.var
- 用Javascript将焦点设置在select元素上会将第一个项目滚动到视图之外
- MVC 5视图-设置Javascript变量
- 如何在按下next时自动将滚动视图设置为页面顶部
- 当网格视图设置为 true 时,Jqgrid 在 IE9 中显示“正在加载”
- 如何模拟客户'的IE兼容性视图设置
- 根据当前视图设置按钮为可见或不可见
- 角.从视图设置属性
- 为部分视图设置JavaScript事件处理程序的最佳实践