【问题标题】:Update Database Record with Ajax in Codeigniter在 Codeigniter 中使用 Ajax 更新数据库记录
【发布时间】:2016-01-21 03:29:28
【问题描述】:

我正在尝试使用 ajax 响应中的 ajax 更新数据库记录,获得成功消息,但实际数据库记录根本没有更新。但它想知道当查询没有更新数据库时,ajax 响应应该如何抛出成功消息。

查看:

// AJAX code to update the database
// update marks when form is submitted 
$('#updateMarks').on('submit',function(event) {
  event.preventDefault();
  var practical_mark = $("#mark_written").val();
  var written_mark   = $("#mark_practical").val(); 
  var comment        = $("#comment").val();
  var mark_id        = $("#mark_id").val();
  $.ajax({
    type: "POST",
    url: "<?php echo site_url('admin/exam_marks_update'); ?>",
    data: { practical_mark : practical_mark, 
           written_mark: written_mark, 
           comment : comment,
           mark_id : mark_id
          },
    success: function(response)
    {
      alert("success");
    },
    error: function(){
      alert("Error");
    },
  });
});
<?php foreach($marks as $row2): ?>
<form method="post" role="form" id="updateMarks">
  <tr>
    <td class="text-center"><?php echo $student['name']; ?></td>
    <td>
      <!-- create two col table for marks category -->
      <table class="table table-bordered table-hover toggle-circle">
        <thead>
          <tr>
            <th data-toggle="true" class="text-center"><?php echo get_phrase('written_exam'); ?></th>
            <th data-toggle="true" class="text-center"><?php echo get_phrase('practical_exam'); echo get_phrase('_(out_of_100)'); ?></th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td class="text-center"><input type="number" value="<?php echo $row2['written_mark_obtained'];?>" id="mark_written" name="mark_written" class="form-control"  /></td>
            <td class="text-center"><input type="number" value="<?php echo $row2['practical_mark_obtained'];?>" id="mark_practical" name="mark_practical" class="form-control"/></td>
          </tr>
        </tbody>
      </table>
      <!-- end create two col table for marks category -->
    </td>
    <td class="text-center"><textarea class="form_control" id="comment" name="comment" rows="4" > <?php echo $row2['comment'] ?> </textarea></td>
    <td class="text-center">
      <input type="hidden" id="mark_id" name="mark_id" value="<?php echo $row2['mark_id'];?>" />
      <button type="submit" class="btn btn-block btn-success btn-md"><i class="icon pe-pen" aria-hidden="true"></i><?php echo get_phrase('update'); ?></button>
    </td>
  </tr>
</form>
<?php endforeach; ?>

控制器:

function exam_marks_update(){
$data['written_mark_obtained']   = $this->input->post('written_mark');
$data['practical_mark_obtained'] = $this->input->post('practical_mark');
$data['comment']                 = $this->input->post('comment');
$this->crud_model->update_student_marks($data, $this->input->post('mark_id'));
}

型号

function update_student_marks($data, $mark_id){
$this->db->where('mark_id', $mark_id);
$this->db->update('mark', $data);
}

【问题讨论】:

  • 使用检查元素,如果有 ajax 请求错误,则触发错误。
  • 检查元素时似乎没有错误.. 我正在使用 chrome 浏览器,当我单击更新按钮时,它显示成功消息但不更新数据库:(

标签: javascript php jquery ajax codeigniter


【解决方案1】:

如果对服务器的请求成功,则始终调用 Jquery ajax success 回调函数。您需要从服务器返回响应数据以验证数据库操作何时成功。我已经编辑了你的代码,这可能对你有用。

型号

 function update_student_marks($data, $mark_id){
      .....
      return $this->db->update('mark', $data);
    }

控制器::

  function exam_marks_update(){
      .....
      if($this->crud_model->update_student_marks($data, $this->input->post('mark_id'))){
       echo json_encode(array('success' => true));
       exit;
     } else {
      echo json_encode(array('success' => false));
      exit;
    }
 }

查看

 $.ajax({
        type: "POST",
        url: "<?php echo site_url('admin/exam_marks_update'); ?>",
        dataType :'json',
        data: { practical_mark : practical_mark, 
               written_mark: written_mark, 
               comment : comment,
               mark_id : mark_id
              },
        success: function(response)
        {
          if (response.success === true){
            alert("success");
          } else {
            alert('failed');
          }
        },
        error: function(){
          alert("Error");
        },
      });

【讨论】:

  • 现在它显示了错误消息,但是如何找到错误消息的实际所属位置。
  • 是否提示失败 alert('failed'); ?
  • 不,它显示来自实际错误函数的错误
  • 试试这个错误:function(ts) { alert(ts.responseText); }
  • 也可以查看http状态,错误:function(ts) { alert(ts.status); }
【解决方案2】:

您的控制器正在检索不存在的输入...您需要将 name, id 作为输入而不是您回显的值传递...查看控制器:

function exam_marks_update(){
$data = array(
    'written_mark_obtained'   => $this->input->post('written_mark'),
    'practical_mark_obtained' => $this->input->post('practical_mark'),
    'comment'                 => $this->input->post('comment')
);
$this->db->where('mark_id', $this->input->post('mark_id'));
$this->db->update('mark', $data);
}

并改变这个:

  var comment        = $("#comment").val();

  var comment        = $("#comment").html();

因为注释是文本区域...

【讨论】:

  • 你的意思是我必须将参数设置为控制器功能??
  • @sujandahal 我的意思是你写了错误的输入名称.. 试试我的控制器它会工作
  • 我正在尝试您的控制器,但对我来说没有好运:(任何其他解决方案??我还在 foreach 循环中设置了我的表单,这就是这个问题的原因??因为更新按钮只是为通过 foreach 检索到的第一行工作
  • 那么我如何将输入值传递给 ajax 和 ajax 到控制器。如果你能用代码清楚地提到它,那对我会有很大的帮助
  • @sujandahal 是的,没有模型,现在就像我的代码一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多