使用ajax和codeigniter发布到数据库后,使用结果刷新div

时间:2013-06-14 21:23:28

标签: jquery ajax codeigniter

我正在编写一个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);
    }

3 个答案:

答案 0 :(得分:1)

作为对“没有任何反应”的问题的间接回答,我建议采取一种策略,确保您至少看到发生的事情。

  1. success:处理程序外,还添加error:处理程序和alert()或其他内容。
  2. 在您的成功处理程序中,添加debugger;语句作为第一行。这将导致您的浏览器(当开发区域可见时,chrome)暂停执行。这样您就可以检查data变量的内容。
  3. 
    
        $.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);