如何使用Ajax在按钮单击时将值发布到控制器功能并同时重定向到新页面?

时间:2016-06-26 23:47:42

标签: javascript php jquery ajax codeigniter

我有一个更改页面的按钮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()。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

你的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;
    }

答案 1 :(得分:0)

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

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

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