通过ajax

时间:2015-04-26 22:25:49

标签: ajax twitter-bootstrap codeigniter

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

所以我在bootstrap模式窗口中创建了一个表单来添加一个新成员。值包括:名字,姓氏,电子邮件和passowrd。 我正在使用jQuery验证来验证信息,然后我想将值传递给控制器​​。

$('#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->input->post('lname'),我会得到一个空值。

有什么想法吗?

编辑:可能有用:

  • 我的javascript代码位于</div><!-- /.modal -->
  • 之后
  • 我的控制器中的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->input->post()替换为$_POST[],但仍然无效。

要完成,我想要我没有使用AJAX传递值而尝试相同,并且它正在工作。我需要使用AJAX,因为我希望表单位于bootstrap模式窗口中。

事情是,似乎控制器中的函数process_add_Member()未被调用。我可以做任何事情而且不会发生。

没人? :(我真的不明白什么在这里不起作用。

HELP! 有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

由于您使用表单序列化方法传递数据,因此使用material.opacity = 0.5;直接检索帖子值$this->input->post()

希望这能解决你的问题。

答案 1 :(得分:0)

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

总的来说:你应该尽可能使用辅助函数和类。如果您不使用提供的函数,则无法使用框架。