当我在做登陆页面的时候,常常会用到ajax方法来检测用户信息所填写的内容是否符合规范要求。一开始,为了简单明了,快速实现功能,在使用jQuery时,是这样写的:
$.ajax({ url : "{:U('public/checklogin')}", cache : false, type : 'POST', dataType : 'json', data : 'username='+$('#username').val()+'&password='+$('#password').val()+'&verify='+$('#code').val(), success : function(e){ if ( e.status == 0 ){ verif_error(e.info); }else{ alert('检测通过!'); } } });
用的时候基本没有什么问题,data的数据是通过对应字段的ID获得的值,再通过ajax传递给后台,PHP处理后,返回结果。
但是这里忽略了一个特殊字符&.
如果用户传过来的password或者其他字段中带有&的话,它会将字符串切割成两个部分。比如说password=abc&123,当后台想要接收password.
echo $_POST['password']; //结果输出的只有abc
前台页面上的值在传递给$.ajax()方法传递时,它会自动将其转义。
所以解决方案可以是这样子:
var datas = { 'username':$('#username').val(),'password':$('#password').val(),'verify':$('#code').val()}; $.ajax({ url : "{:U('public/checklogin')}", cache : false, type : 'POST', dataType : 'json', data : datas, success : function(e){ if ( e.status == 0 ){ verif_error(e.info); }else{ alert('检测通过!'); } } });
用json格式传递就可以了。