我正在编写一个Codeigniter应用程序,我使用ajax将数据发送到我的控制器/方法,并且想知道如何使用ajax刷新div而不重新加载整个页面(使用ajax从db到view的路径是仍然让我感到困惑)
我使用此代码将数据发送到数据库
<script>
$(function(){
$("#rate").submit(function(){
dataString = $("#rate").serialize();
$.ajax({
type: "POST",
url: "<?php echo base_url(); ?>product/rate",
data: dataString,
});
</script>
发布到数据库的工作正常。
然后我在视图中有一个div来获取数据库的结果,所以我附加了如下代码:
<script>
$(function(){
$("#rate").submit(function(){
dataString = $("#rate").serialize();
$.ajax({
type: "POST",
url: "<?php echo base_url(); ?>product/rate",
data: dataString,
dataType: "html",
success: function(data){
$('#result').html(data);
}
});
return false; //stop the actual form post !important!
});
});
</script>
但没有任何反应(我在网上关注了一些片段)
有人可以指导我吗?
由于
更新 //控制器
function rate(){
if ($this->input->post('e1') || $this->input->post('e2') || $this->input->post('e3') || $this->input->post('e4') || $this->input->post('e5'))
{
$this->Mproduct->rateProduct();
$this->db->cache_delete_all();
}
}
//模型
public function rateProduct()
{
$data = array('usage' => $_POST['e1'],
'packing' => $_POST['e2'],
'size' => $_POST['e3'],
'recycling' => $_POST['e4'],
'material'=>$_POST['e5'],
'idUser'=>$_POST['idUser'],
'idProduct' => $_POST['idProduct']
);
$this->db->insert('Rating', $data);
}
答案 0 :(得分:1)
作为对“没有任何反应”的问题的间接回答,我建议采取一种策略,确保您至少看到发生的事情。
success:
处理程序外,还添加error:
处理程序和alert()
或其他内容。debugger;
语句作为第一行。这将导致您的浏览器(当开发区域可见时,chrome)暂停执行。这样您就可以检查data
变量的内容。
$.ajax({
type: "POST",
url: "product/rate",
data: dataString,
dataType: "html",
success: function(data){
debugger;
$('#result').html(data);
},
error: function() { alert("oops..."); }
});
更新:
在任何情况下,控制器的rate()
成员都应返回一些有效的html,但不能直接通过echo
语句,而是通过视图返回,如下所述:
Codeingiter, manual, static pages
function rate()
{
//...
$this->load->view('rate/view', $data);
}
鉴于你有一个文件 application / views / rate / view.php :
<?php
echo 'TODO: put some html code...';
答案 1 :(得分:1)
尝试将一些数据输出到rate()函数中,例如:
echo "<b>Response to return</b>";
答案 2 :(得分:0)
要摆脱ob_start()错误,请将$config['compress_output'] = FALSE;
添加到 config.php
或通过代码将其设置为false:
$this->config->set_item('compress_output', FALSE);