如何在单击按钮时使用Ajax将值发送到控制器函数,并同时重定向到新页面


How to post a value to a controller function on button click using Ajax and also redirect to new page at the same time?

我有一个按钮Next改变页面-

<a class="disabled" href="step">
   <button class="btn btn-primary launch-btn disabled next">NEXT</button>
</a>

而且,当这个按钮被单击时,我有一个Ajax函数,它将数据发送到控制器函数-

<script type="text/javascript">
$(function(){
    $('.next').click(function() {
    var a = $('#box').data('val');
    $.ajax({
       type: "POST",
       url: "<?php echo base_url(); ?>study/CreateData",
       data: a,
       success: function(data)
       {
          console.log(data); 
       },
       error: function()
       {
          console.log("fail");
       } 
     });
  });
});
</script>

我用它来接收来自Ajax的值-

public function CreateData() {
        $data = $this->input->post('data');
        return $data;
    }

Next按钮击中它的控制器,它改变到一个新的页面,我试图检索由Ajax发布到CreateData()函数的值-

public function step()
    {
        $data = $this->CreateData();
        if(!empty($data)){
            print_r($data); exit;
        }
        else {
            echo "blank"; exit;
        }
        $this->load->view('step2');
    }

然而,这一直在重复blank。这显然意味着返回的$data是空的,但我不确定为什么。我的Ajax脚本中的success函数正在记录data,因此它将值发布到CreateData()。我哪里做错了?

你的javascript应该是这样的

<script type="text/javascript">
$(function(){
    $('.next').click(function() {
    var a = $('#box').data('val');
    $.ajax({
       type: "POST",
       url: "<?php echo base_url(); ?>study/CreateData",
       data: {my_data: a},
       success: function(data)
       {
          console.log(data); 
       },
       error: function()
       {
          console.log("fail");
       } 
     });
  });
});
</script>

注意data属性。我已将其更改为包含变量a的对象。

现在你应该可以在php函数中使用

检索它了
public function CreateData() {
        $data = $this->input->post('my_data');
        return $data;
    }

Adr的回答解决了部分问题。为了实际存储和访问数据,将其存储在会话中而不是变量中就可以了——

public function CreateData() {
        $data = $this->input->post();
        $this->session->unset_userdata('createData');
        $this->session->set_userdata('createData', $data);
}

这防止了$data变量在第二次调用时被覆盖。