【发布时间】: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->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,因为我希望表单位于引导模式窗口中。
问题是我在控制器中的函数process_add_Member() 似乎没有被调用。我可以在其中做任何事情,但它不会发生。
没人吗? :( 我真的不明白这里有什么不工作。
帮助! 请问有人可以帮我吗?
【问题讨论】:
-
$(form).serialize()的值是多少? -
你从
var_dump($this->input->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