$('#form1').submit(function(){
$.ajax({
url:'login.php?act=login',
data:$('#form1').serialize(),
type:'POST',
dataType:'text',
beforeSend:function(){
}
if($('#password').val()==''){
alert('密碼不能為空');
return false;
}else{
var p = $('#password').val();
alert(p);
$('#password').val(hex_md5(p));
alert($('#password').val());
}
},
success:function(msg){
......
};
}
});
return false;
});
是这样,我的目的是,在提交之前,对密码进行md5计算,达到加密传输密码的作用。
可是实际的效果是,当我password值为123的时候,alert($('#password').val()) 打印出来是对的202cb962ac59075b964b07152d234b70 ,可是post到后台php之后,还是123 。
我感觉像是data:$('#form1').serialize()已经在beforeSend之前取值了,所以传到后面还是旧值。
经过测试,如果我把md5加密那一块拿出来,放到$.ajax()之前进行操作,是没有问题的。只是这样用起来不方便,有没办法让serialize()在beforSend之后执行呢?
补充:
在使用后贴@lisfan 提供的方法后,提交正常了
$('#form1').submit(function(){
$.ajax({
url:'login.php?act=login',
**data:null,**
type:'POST',
dataType:'text',
beforeSend:function(){
}
if($('#password').val()==''){
alert('密碼不能為空');
return false;
}else{
var p = $('#password').val();
alert(p);
$('#password').val(hex_md5(p));
alert($('#password').val());
**this.data=$('#form1').serialize();**
}
},
success:function(msg){
......
};
}
});
return false;
});
但是后台php的$_REQUEST和$_POST都收不到数据。如下图:
下面是firebug看到的post数据,上面是php分别print $_REQUEST、$_POST和php://input的数据, 可以看到在file_get_contents("php://input")中是看到了原始数据的,但是为啥没有被封装到$_POST中去呢?
.
在不修改题主原有结构的前提下,试试修改如下,看带
*
星号的位置