當我在做登陸頁面的時候,常常會用到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格式傳遞就可以了。
