【问题标题】:Passing values to codeigniter controler through ajax通过ajax将值传递给codeigniter控制器
【发布时间】:2015-04-26 22:25:49
【问题描述】:

我遇到了一个问题,现在真的毁了我的生活。我正在尝试通过 Ajax 将值传递给 codeigniter 控制器。 我已经阅读了很多关于它的内容,但我找不到为什么这不起作用。

所以我在引导模式窗口中制作了一个表单来添加一个新成员。这些值是:名字、姓氏、电子邮件和密码。 我正在使用 jQuery validate 来验证信息,然后我想将值传递给控制器​​。

$('#addMember form').validate({  // initialize plugin
        rules: {
            lname: {
                required: true,
                minlength: 2
            },
            name: {
                required: true,
                minlength: 2
            },
            mail: {
                required: true,
                email: true
            },
            password: {
                required: true
            },
            repassword: {
                required: true,
                equalTo: "#password"
            }
        },
        highlight: function (element) {
            $(element).closest('.input-group')
                .removeClass('success').addClass('error');
        },
        success: function (element) {
            element.addClass('valid').closest('.input-group')
                .removeClass('error').addClass('success');
        },
        submitHandler: function (form) {
            // form validates so do the ajax
            var dataString = $(form).serialize();
            $.ajax({
                type: $(form).attr('method'),
                url: $(form).attr('action'),
                data: dataString,
                success: function (data, status) {
                    // ajax done
                    // do whatever & close the modal
                    alert(status);
                    $('.modal').modal('hide');
                }
            });
            return false; // ajax used, block the normal submit
        }
    });
<div id="addMember" class="modal fade">
  <div class="modal-dialog">
    <div class="modal-content">
      <form id="addMemberForm" method="POST" action="<?php echo base_url('adminMembers/process_add_member');?>">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true"></span></button>
        <h4 class="modal-title">Add a new member</h4>
      </div>
      <div class="modal-body">
            <div class="input-group">
                <span class="input-group-addon" id="basic-addon1">Last Name</span>
                <input name="lname" type="text" class="form-control" placeholder="" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                <span class="input-group-addon" id="basic-addon1">First name</span>
                <input name="name" type="text" class="form-control" placeholder="" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                <span class="input-group-addon" id="basic-addon1">Email</span>
                <input name="mail" type="email" class="form-control" placeholder="" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                <span class="input-group-addon" id="basic-addon1">Password</span>
                <input id="password" name="password" type="password" class="form-control" placeholder="" aria-describedby="basic-addon1">
            </div>

            <div class="input-group">
                <span class="input-group-addon" id="basic-addon1">Password again</span>
                <input name="repassword" type="password" class="form-control" placeholder="" aria-describedby="basic-addon1">
            </div> 
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
        <button type="submit" class="btn btn-primary" value="add">Add</button>
      </div>
      </form>
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

我在警报窗口中收到一条成功消息,因此 ajax 部分正在工作。 然后我不知道如何使用控制器中的值。 如果我尝试打印 $this-&gt;input-&gt;post('lname') 我得到一个空值。

有什么想法吗?


编辑:可能有用:

  • 我的 javascript 代码放在 &lt;/div&gt;&lt;!-- /.modal --&gt; 之后。
  • 我的控制器中的 add_Member 函数如下所示:

    public function process_add_member()
    {
        $this->membersManager->add_member();
    }
    
  • 最后是模型:

    public function add_member()
    {
        $name = $this->input->post('name');
        $lname = $this->input->post('lname');
        $email = $this->input->post('mail');
        $password = $this->input->post('password');
    
        return $this->db->set(array('name' => $name,
            'lname' => $lname,
            'login' => $email,
            'email' => $email,
            'password' => $password))->insert($this->table);
    }
    

正如我所说,我尝试将 $this-&gt;input-&gt;post() 替换为 $_POST[],但仍然无法正常工作。

最后我想说的是,我已经尝试过相同的方法,但没有使用 AJAX 来传递值,并且它正在工作。我需要使用 AJAX,因为我希望表单位于引导模式窗口中。

问题是我在控制器中的函数process_add_Member() 似乎没有被调用。我可以在其中做任何事情,但它不会发生。

没人吗? :( 我真的不明白这里有什么不工作。

帮助! 请问有人可以帮我吗?

【问题讨论】:

  • $(form).serialize() 的值是多少?
  • 你从var_dump($this-&gt;input-&gt;post())得到什么吗?
  • $(form).serialize( ) 值为 lname=lnametest&name=fnametest&mail=test%40test.com&password=1234&repassword=1234
  • 我没有从 var_dump($this->input->post( )) 得到任何东西
  • 在 ajax 请求服务器错误期间,您是否查看过 JavaScript 控制台?如果您使用 CodeIgniter 的内置 CSRF 保护,那么您必须将 CSRF 令牌的值与 Ajax 数据一起发送。

标签: ajax twitter-bootstrap codeigniter


【解决方案1】:

由于您使用表单序列化方法而不是使用$this-&gt;input-&gt;post() 来传递数据,因此直接检索帖子值$_POST['&lt;input_name&gt;']

希望这能解决您的问题。

【讨论】:

    【解决方案2】:

    您应该在视图中使用form_open() 辅助函数,以便将 CSRF 令牌作为隐藏字段包含在内。

    一般来说:您应该尽可能使用辅助函数和类。如果您不使用提供的功能,则使用框架是没有用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 2019-07-16
      • 2014-02-10
      • 2015-08-13
      相关资源
      最近更新 更多