我试图通过在单击链接时显示 Modal 来显示名为tid
和ketprob
的表列中的一些记录。模态和查询看起来不错(通过回显last_query检查(,但模态没有显示任何数据...请帮我:(
JS代码:
$('#showdata').on('click', '.item-info', function(){
var tid = $(this).attr('data');
$.ajax({
type: 'ajax',
method: 'get',
url: '<?php echo base_url() ?>repeatproblem/infoReprob',
data: {tid:tid},
async: false,
dataType: 'json',
success: function(data){
var html = '';
var i;
for(i=0; i<data.length; i++){
html +='<p>'+data[i].tid+'</p>'+
'<p>'+data[i].ketprob+'</p>';
}
$('#infoModal').modal('show');
$('#view_errorcode').html(html);
},
error: function(){
alert('Gagal Info Kode Error!');
}
});
});
我的控制器:
public function infoReprob(){
$result = $this->m->infoReprob();
echo json_encode($result);
}
我的模型:
public function infoReprob(){
$tid = $this->input->get('tid');
$this->db->select('tid, ketprob')->where('tid', $tid);
$query = $this->db->get('histprob');
if($query->num_rows() > 0){
return $query->row();
}else{
return false;
}
}
如果满足此条件,则return $query->row();
模型中使用语法:$query->num_rows() > 0
,这意味着您的模型将返回查询第一行的对象表示形式,并且下面控制器中的$result
变量将是一个具有两个属性的对象:tid
和ketprob
public function infoReprob(){
$result = $this->m->infoReprob();
echo json_encode($result);
}
现在看看你的 ajax 调用成功回调函数
success: function(data){
var html = '';
var i;
for(i=0; i<data.length; i++){
html +='<p>'+data[i].tid+'</p>'+
'<p>'+data[i].ketprob+'</p>';
}
$('#infoModal').modal('show');
$('#view_errorcode').html(html);
}
由于上面的控制器使用echo json_encode($result);
语法,因此 ajax 调用将返回$result
变量的 json 表示形式,而上面成功回调函数中的data
变量将如下所示
{ "tid": "1", "ketprob": "abc" }
问题是,data.length
ajax 成功回调函数中将未定义data
因为它不是数组,因此不会执行for
循环,html
将是一个空字符串,请参阅此 jsfiddle。这就是您的模态不显示数据的原因。
为了解决这个问题,我建议更改您的模型代码,如下所示
public function infoReprob(){
$tid = $this->input->get('tid');
$this->db->select('tid, ketprob')->where('tid', $tid);
$query = $this->db->get('histprob');
return $query->result();
}
通过使用return $query->result();
语法,模型将始终返回对象数组。因此,您的 ajax 调用将返回如下所示的 json
[ { "tid": "1", "ketprob": "abc" } ]
这是一个 JSON 数组,因此 Ajax 成功回调函数中的data.length
不会未定义,并且您的模态将显示数据。看到这个jsfiddle,你会看到html
变量不为空。
我想你应该使用echo $query->row();
而不是return $query->row();
。
通过更改返回 $query->row(( 来解决;返回 $query->result((;
要了解这个。或者任何人都可以告诉不同..谢谢
public function infoReprob(){
$tid = $this->input->get('tid');
$this->db->select('tid, ketprob')->where('tid', $tid);
$query = $this->db->get('histprob');
if($query->num_rows() > 0){
return $query->result();
}else{
return false;
}
}