javascript - 在 CodeIgniter 的 AJAX 成功函数中提交动态创建的表单

标签 javascript php html ajax codeigniter

我有在 AJAX 调用的成功函数中动态创建的表单。我认为,一旦将此表单附加到 DOM,它就会像 CodeIgniter 中的普通表单一样提交。然而,当我点击提交按钮时,它被发送到适当的 Controller ,但没有任何 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 + " ");
        }
    });
});

我的 Controller 函数:

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

我知道这不是最漂亮的代码,但我是否遗漏了一些简单的东西?有更好的方法吗?

感谢您的帮助!

最佳答案

问题是您的 Controller 方法 edit_ticket() 正在接收 POST 信息 $this->input->post(...) 但您没有设置您的将表单传递给方法 POST,从而发送 GET 信息而不是 POST。

解决方案:将属性 method="POST" 添加到您的表单中:

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

关于javascript - 在 CodeIgniter 的 AJAX 成功函数中提交动态创建的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482145/

相关文章:

html - 如何在 thead 标签上制作 css 形状

html - 创建一个 Bootstrap 导航栏折叠覆盖菜单

php - 使用 PHP/MySQL 导入 CSV 数据

javascript - 无法加载资源 : the server responded with a status of 403 (Forbidden) MVC 5

javascript - 在 Select2 中设置文本值

javascript - 当用户在不同的选项卡中时,jQuery 更改页面的标题

php - 显示来自数据库 PHP 的日期

php - 为什么不包含 URL 变量时 htaccess 重定向不起作用?

html - 将鼠标悬停在图像上时显示带有半透明颜色叠加层的标题

javascript - 将 Sweet alert 与 Typescript 类一起使用