我有一个问题,当我使用jquery发布表单和codeigniter响应显示错误501方法没有实现。我在使用像android这样的智能手机浏览器时遇到此错误。这是我的代码:
$(document).ready(function(){
var obj=$('#recoveryForm');
obj.find(':submit').removeClass('disabled');
obj.validate({
submitHandler: function() {
$.ajax({
cache:false,
dataType:'json',
url: "<?=base_url();?>reseller/changePassword",
type: "POST",
data: obj.serialize(),
beforeSend:function(){
obj.find(':submit').button('loading');
},
success:function(data){
if(data.status=='false'){
$('#alert').html('<div class="alert alert-danger center">'+data.noty+'</div>');
obj.find(':submit').button('reset');
}else{
$('#alert').html('<div class="alert alert-success center">'+data.noty+'<br><br><a href="<?=base_url();?>" class="btn btn-pink">Back to Home</a></div>');
obj.fadeOut('slow',function(){obj.remove()});
}
},
error: function (xhr, ajaxOptions, thrownError) {
$('#alert').html('<div class="alert alert-danger center">'+xhr.status+' '+ thrownError+'</div>');
obj.find(':submit').button('reset');
}
});
}
});
});
这是我的PHP代码
public function changePasswordR(){
if($this->check_login()){
$data=$this->input->post(null,true);
if(!empty($data['password']) || !empty($data['newpassword']) || !empty($data['konfirmpassword'])){
$user=$this->reseller_data();
$row=$this->madmin->read(__CLASS__,'where email= "'.$user['email'].'"');
if(!empty($row)){
if($this->salt($data['password'])==$row[0]->password){
if($this->madmin->update(__CLASS__,'email',$row[0]->email,array('password'=>$this->salt($data['newpassword'])))){
//noty
$this->madmin->create('notification',array('id'=>null,'time'=>date('Y-m-d H:i:s'),'msg'=>$row[0]->nama.' mengubah passwordnya'));
die(json_encode(array('status'=>'true','noty'=>'<script type="text/javascript">alert("Selamat '.$row[0]->nama.', password anda berhasil diubah. Silahkan melakukan login ulang menggunakan password baru anda.");window.location.href = "'.base_url().'logout";</script>')));
}else{
die(json_encode(array('status'=>'false','noty'=>'Gagal mengubah password, silahkan coba beberapa saat lagi.')));
}
}else{
die(json_encode(array('status'=>'false','noty'=>'Password lama salah.')));
}
}else{
die(json_encode(array('status'=>'false','noty'=>'Akun tidak ditemukan.')));
}
}else{
die(json_encode(array('status'=>'false','noty'=>'Data tidak lengkap.')));
}
}else{
die(json_encode(array('status'=>'false','noty'=>'Login kembali untuk melanjutkan.')));
}
}
enter code here
请帮助我!
答案 0 :(得分:1)
如果启用了CSRF检查项目,则应将csrf_token_name发送给CI。 因此,您应该在HTML代码中使用form_open(&#34; / some_url&#34;,&#39;&#39;)和form_close(),然后将表单序列化并发送到服务器。
var _form = $("#some_form").serializeArray();
答案 1 :(得分:0)
在视图中更改此行
url: "<?=base_url();?>reseller/changePassword",
到
url: "<?php echo base_url('reseller/changePassword');?>",
将以下行添加到控制器方法
header('Content-Type: application/json');
并使用echo代替die
echo json_encode(array(....));
答案 2 :(得分:-1)
我不知道为什么,但我添加了这段代码
mysql_set_charset('utf8');
及其工作