【问题标题】:Submitting a form dynamically created in AJAX success function in CodeIgniter在 CodeIgniter 中提交在 AJAX 成功函数中动态创建的表单
【发布时间】:2015-10-07 13:09:07
【问题描述】:

我有我在 AJAX 调用的成功函数中动态创建的表单。我认为,一旦将此表单附加到 DOM,它就会像 CodeIgniter 中的普通表单一样提交。但是,当我单击提交按钮时,它会被发送到相应的控制器,但没有获取任何 POST 数据。

我的初始表格:

 <div id="editTicketOptions" class="alert alert-info" style="display:none">
     <form name="editTicketForm" id="editTicketForm" action="">
      <div class="form-group">
          <label for="edit_ticket">Choose a Ticket:</label>
          <select name="edit_number" id="edit_number" class="form-control">
               <option value="">Choose one...</option>
               <?php foreach ($created_tickets as $ticket): ?>
                    <option value="<?php echo($ticket->ticketId); ?>"><?php echo ($ticket->ticketId . " - " . $ticket->headline); ?></option>
               <?php endforeach; ?>
          </select>
       </div>
    </form>
</div>

我的 AJAX 调用:

$('#edit_number').change(function(){
    $.ajax({
        type:"POST",
        url: "<?php echo base_url('ticket_system/edit_details'); ?>",
        dataType: "json",
       data:{
            'ticketId': $(this).val()
       },
       success: function(ticket){
            $("#headline_entry").remove();
            $("#description_entry").remove();
            $("#priority_entry").remove();
            $("#button_entry").remove();
            $("#editTicketForm").append("<div class='form-group' id='headline_entry'><label for='edit_headline'>Headline:</label><input type='text' class='form-control' name='edit_headline' id='edit_headline' required></div>");
            $("#editTicketForm").append("<div class='form-group' id='description_entry'><label for='edit_description'>Description:</label><textarea class='form-control' rows='3' name='edit_description' id='edit_description' required>" + ticket[0].description + "</textarea></div>");
            $("#editTicketForm").append("<div class='form-group' id='priority_entry'><label for='edit_priority'>Choose priority:</label><select name='edit_priority' id='edit_priority' class='form-control'><option selected value=" + ticket[0].priority + ">" + ticket[0].priority + "</option><option value='High'>High</option><option value='Medium'>Medium</option><option value='Low'>Low</option></select>");
            $("#editTicketForm").append("<div class='text-center' id='button_entry'><input class='btn btn-primary' type='submit' id='editTicketButton' value='Edit Ticket'></div>");
            $("#editTicketForm").attr("action", "<?php echo base_url('ticket_system/edit_ticket/'); ?>" + "/" +ticket[0].ticketId + " ");
        }
    });
});

我的控制器功能:

public function edit_ticket()
{
    $ticketId = $this->uri->segment(3);
    $headline = $this->input->post('edit_headline');
    $description = $this->input->post('edit_description');
    $priority = $this->input->post('edit_priority');
    $edit_ticket = array(
        'ticketId' =>$ticketId,
        'headline' => $headline,
        'description' => $description,
        'priority' => $priority
    );

    $this->tickets->editTicket($edit_ticket);

    redirect('ticket_system/view_tickets');
}

我知道这不是最漂亮的代码,但我在这里遗漏了一些简单的东西吗?有没有更好的方法来做到这一点?

感谢您的帮助!

【问题讨论】:

    标签: javascript php html ajax codeigniter


    【解决方案1】:

    问题是您的控制器方法 edit_ticket() 正在接收 POST 信息 $this-&gt;input-&gt;post(...) 但您没有将表单设置为方法 POST,因此发送的是 GET 信息而不是 POST。

    解决方案:在表单中添加属性method="POST"

    <form name="editTicketForm" id="editTicketForm" method="POST">
    

    【讨论】:

    • 我知道它必须是这样简单的东西。让我发狂!非常感谢您的帮助!
    猜你喜欢
    • 2013-03-17
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多