【问题标题】:Refresh a div with result after posting to database with ajax and codeigniter使用 ajax 和 codeigniter 发布到数据库后刷新带有结果的 div
【发布时间】:2013-06-14 21:23:27
【问题描述】:

我正在编写一个 Codeigniter 应用程序,我使用 ajax 将数据发送到我的控制器/方法,并且想知道如何使用 ajax 刷新 div 而无需重新加载整个页面(从 db 到使用 ajax 查看的路径是仍然让我感到困惑)

我使用这段代码将数据发送到数据库

<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>

但什么也没发生(我在网上跟踪了一些 sn-ps)

谁能指导我完成?

谢谢

更新 //控制器

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);
    }

【问题讨论】:

  • 您应该在控制器中回显来自 db 的输出。你能发送控制器代码吗?
  • 我用我的控制器和模型更新了帖子,谢谢
  • 您的控制器似乎没有加载视图或输出将显示在您的 AJAX 响应中的 HTML。
  • 如我所见 - 根本没有返回数据 - 简单地向用户回显一些消息,如果 rateProduct 返回真/假......另外,在这种情况下你没有加载模型,或者它是自动加载的?

标签: jquery ajax codeigniter


【解决方案1】:

作为对您“什么都没有发生”的问题的间接回答,我建议您采用一种策略来确保您至少看到某些事情正在发生。

  1. 除了success: 处理程序之外,还要添加一个error: 处理程序和alert() 或其他东西。
  2. 在您的成功处理程序中,添加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...';

【讨论】:

  • 谢谢 Eric,谢谢大家,它工作得很好,不知道我们必须为此创建一个特殊视图,不它就像一个魅力跨度>
【解决方案2】:

尝试将一些数据输出到 rate() 函数中,例如:

echo "<b>Response to return</b>";

【讨论】:

  • 现在我收到这样的消息:>致命错误:ob_start() [ref.outcontrol]: 不能在输出缓冲中使用输出缓冲在第 181 行的 /system/core/Exceptions.php 中显示处理程序,但回显有效
【解决方案3】:

要消除 ob_start() 错误,请将 $config['compress_output'] = FALSE; 添加到 config.php 或通过代码将其设置为 false:

$this->config->set_item('compress_output', FALSE); 

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2023-04-02
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多