PHP:在 ajax 的表单中插入数据后,我无法重定向到主 table

PHP: I can't redirect to the main table after insert data in a form with ajax

这是打开多插入表单时我的脚本:

<script src="<?= base_url('assets/'); ?>vendor/jquery/jquery.min.js"></script>
<script type="text/javascript">
   $(document).ready(function(){
      var i =1;
      $('#add').click(function(){
        i++;

        $('#dynamic_field').append('<tr id="row'+i+'"> <td><select name="bhn_id[]" id="bhn_id" placeholder="enter name" class="form-control form-control-sm bhn_id"><option value="">-- Pilih Bahan --</option><?php foreach ($data_bahan->result_array() as $key => $tb_bahan) : ?>
                            <option <?= set_select('bhn_id', $tb_bahan['id_bhn']) ?> value="<?=$tb_bahan['id_bhn'] ?>"><?= $tb_bahan['nm_bhn'] ?></option><?php endforeach; ?>
                              <?= form_error('bhn_id', '<small class="text-danger">', '</small>'); ?>
                          </select><?= form_error('bhn_id', '<small class="text-danger">', '</small>'); ?></td><td width="100"><input type="number" class="form-control form-control-sm jlh_keluar"  name="jlh_keluar[]" id="jlh_keluar" value="<?= set_value('jlh_keluar'); ?>"></td><td align="center" width="100"><button type="button" name="remove" id="'+i+'" class="btn btn-outline-danger btn-sm btn_remove">x</button></td></tr>');
        });
    $(document).on('click', '.btn_remove', function(){
      var button_id = $(this).attr("id");
      $("#row"+button_id+"").remove();
      });

    $('#submit').click(function(){
      $.ajax({
        url:"<?= base_url('m_form_bahan_keluar/tambah_bahan');?>",
        method:"POST",
        data:$('#add_jenis').serialize()
        // success:function(data)
        // {
        //   $('#add_jenis')[0].reset("");

        // }
      });
    });

   });
</script>

这是当我点击提交按钮时 运行 的控制器。

public function tambah_bahan()
    {
    
        $mysqli = new mysqli("localhost", "root", "", "db_labgizi");
        $data['title'] = 'Tambah Pengeluaran Bahan';
        $data['data_bahan'] = $this->TransaksiBahan_model->get_bahan();
        $data['data_user'] = $this->Db_model->getid();
        $data['id_formbhnkeluar'] = $this->TransaksiBahan_model->Id_Bahan_keluar();
        
        $a = count($_POST["bhn_id"]);  
        $b = count($_POST["jlh_keluar"]);
        if($a > 0)  {  
           for($i=0; $i<$a; $i++) {  
             if(trim($_POST["bhn_id"][$i] != '') && trim($_POST["jlh_keluar"][$i] > '0')) {  
                $bhn_id = $mysqli -> real_escape_string($_POST['bhn_id'][$i]);
                $jlh_keluar = $mysqli -> real_escape_string($_POST['jlh_keluar'][$i]);
                $id_formbhnkeluar = $mysqli -> real_escape_string($_POST['id_formbhnkeluar']);
                $penerima = $mysqli -> real_escape_string($_POST['penerima']);
                $laboran = $mysqli -> real_escape_string($_POST['laboran']);
                $tgl_bhnkeluar = $mysqli -> real_escape_string($_POST['tgl_bhnkeluar']);
                $ket_formbhnkeluar = $mysqli -> real_escape_string($_POST['ket_formbhnkeluar']);
                $sql="INSERT INTO tb_formbahankeluar(id_formbhnkeluar,tgl_bhnkeluar,laboran,penerima,ket_formbhnkeluar)
                VALUES ('$id_formbhnkeluar', '$tgl_bhnkeluar',
                '$laboran','$penerima','$ket_formbhnkeluar')";
                $sql2="INSERT INTO tb_bahan_keluar(formbhnkeluar_id,bhn_id,jlh_keluar) VALUES
                ('$id_formbhnkeluar', '$bhn_id', '$jlh_keluar')";
                
                 $mysqli -> query($sql);
                 $mysqli -> query($sql2);                      
          }  
         } 
        redirect('M_bahan_keluar/index');
        pesan('save');
                
        }  
                
        else {   
         pesan('disimpan', false);
         }   
        }

问题是我无法在成功插入数据后直接转到 Main Table (M_bahan_keluar/index),它仍然会打开表单。应该如何?

您似乎是从 ajax 端点内调用重定向。 ajax 调用是一个单独的 http 请求,其上发生的事情(例如被重定向)不会影响从浏览器到服务器的初始连接。

您需要将重定向合并到 javascript / jquery 调用中,而不是在 ajax 端点内的 php 中重定向。您可以使用 'done' 来完成此操作。

$.ajax({
        url:"<?= base_url('m_form_bahan_keluar/tambah_bahan');?>",
        method:"POST",
        data:$('#add_jenis').serialize()
      }).done(function( msg ) {
    redirect('M_bahan_keluar/index')
  });

done 回调在 https://api.jquery.com/Jquery.ajax/

上讨论

代码后可以设置 最后将您的页面重定向到您的自定义地址:

window.location = "your custom address";