在这个例子中,让jQuery / Ajax与CodeIgniter一起工作的最佳方法是什么?

时间:2009-06-27 07:56:12

标签: php jquery codeigniter

我在尝试使用CodeIgniter和jQuery来生成ajax功能时遇到了问题。我整天都在编码,学习jQuery,并且通常会让我的屁股踢了。让我打破局面,希望有人有勇气帮助我。

我有一个故障单系统,在页面上显示许多故障单...每个故障单都嵌套在多个div中,如下所示:

<div class="eachticketwrapper" id="ticket-362">
   <div class="actionlog">
        <form action="<?= base_url();?>admin/updateticket/362" method="post" id="362" name="362">
           <ul class="displayinline">
           <p>Action Log:
           <span class="actionlog-362">
                <?php echo $actionlog; ?>
            </span>
            </p>
   </div> <!--actionlog-->
            <p>
        <textarea name="actionlogbox362" cols="100" rows="2" id="actionlogbox362" style="" ></textarea>
        </p>
            <div class="finalbuttons">
                <?php echo form_open('admin/updateticket/'.'362'); ?>
            <li><?php 
                            $attrib = "class='updatebutton-362' id='updatebutton-362'";
                            echo form_submit("RapidTask",'Update',$attrib); //setup the button, and set permissions. ?></li>
                <?php echo form_close(); // close the form. ?>
             </div> <!--finalbuttons-->
</div> <!--eachticketwrapper-->

运行时,$ actionlog应类似于以下内容:

worker - 2009-06-25 18:15:23 - Received and Acknowledges Ticket.
worker - 2009-06-25 18:15:23 - Changed Status to In Progress
worker - 2009-06-25 18:15:46 - Changed Priority to High
worker - 2009-06-25 18:15:46 - Changed Category to Network Connection Problem
worker - 2009-06-25 18:17:16 - did something

然后有一个textarea和一个更新按钮。

以下是我的补充jQuery文件的内容:

$(document).ready(function() {
    $('.updatebutton-362').click(function()
        {
            var id = $(this).attr("id").split("-"); // Split the id value at the hyphen, and grab the ticketnum.
            $('.actionlog-'+id[1]).load('http://localhost/ci/index.php/ajaxtestc/');  // do something...
            return false; // return false so default click behavior is not followed.
        });
});

ajaxtestc控制器如下所示:

function index()
    {
        $data['actionlog'] = $this->m_tickets->actionLogPull(362);
        $this->load->vars($data);
        $this->load->view('content/ajaxtestform');
    }

m_tickets模型如下所示:

function actionLogPull($requestedNum=NULL)
    {
        $this->db->where('ticketnum', $requestedNum); // Grab only the status for the ticket requested $requestednum=NULL
        $requestedTicket = $this->db->get('tickets'); // set the initial ticket info to a variable
        $returnvalue = $requestedTicket->row('actionlog');
        return $returnvalue;
    }

现在......这就是我想要的。我想点击更新按钮,让工作人员输入textarea,将其添加到数据库中现有日志的末尾,然后刷新屏幕上的动作日志。

我无法想出明确的方法来做到这一点。任何人都可以阐明如何开始这个过程吗?

非常感谢任何帮助,并提前感谢。

2 个答案:

答案 0 :(得分:4)

$('.updatebutton-362').click内,将.load()行更改为(将name,id替换为您要发送的参数):

$.post('http://localhost/ci/index.php/ajaxtestc/', 
    {name: "John Doe", id: "anything"},
    function(data) {
      $('.actionlog-'+id[1]).html(data);
    }
});

然后在index()控制器的ajaxtestc中的所有内容上,解析_POST变量并调用模型中的任何函数来更新操作日志。

index()操作显示的内容将被加载到actionlog范围内。

答案 1 :(得分:0)

首先,你的代码看起来很乱。第一个标签似乎是未闭合的,form_open嵌套在其中。 我开发网络的经验法则是,在没有任何javascript的情况下使其工作。然后添加javascript作为更好的体验。 在上面的例子中,尝试使用旧方法构建表单,提交后,重定向到您想要的页面。在运行良好之后,一次添加一个jquery。使用jquery表单插件提交表单。在控制器中添加一个简单的检查来处理ajax请求。 我通常使用json进行表单提交,所以在控制器中,我会将一个json_encode数组返回给ajax提交的表单请求。

希望这对你有所帮助。