xuesan18 2015-01-09 19:53 采纳率: 100%
浏览 2291
已采纳

php接收ajax post数据编码只能是gb2312

各位大侠,我是一名初学者,用ajax post方式做的登录模块,提交数据到php,发现用gb2312编码能正常接收数据,用utf-8编码php端就没有反应。我的各个网页均已经设为utf-8编码了,为什么会这样?还有用gb2312发送后,服务器端能正常查询数据库,但是返回数据‘1’后,在js代码里面if与‘1’比较却不相等,结果进入else代码,是否也是编码格式不相同的问题?烦请各位大侠帮忙指点迷津,谢谢!
js代码如下:function loginphp(){

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      msg = xmlhttp.responseText;
    if(msg == '1'){
        document.getElementById("login").innerHTML="登录成功!";
    }else if(msg=='2'){
        document.getElementById("login").innerHTML="用户名或密码错误!";
    }else{
        document.getElementById("login").innerHTML=msg;
    }
}

}
xmlhttp.open("POST","application/reglog/login.php",true);
//xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");
xmlhttp.send("email="+$('email').value+"&pwd="+$('pwd').value);
}

php代码如下:
<?php
include_once "dbconn.php";
$sql = "select * from Basicinfo_user where user_email='".$_POST['email']."' and user_password='".$_POST['pwd']."'";
$num = $conne->getRowsNum($sql);
$conne->close_conn();
if($num == 1){
echo '1';
}else if($num == 0){
echo '2';
}else{
echo $conne->msg_error();
}
?>

展开全部

  • 写回答

4条回答 默认 最新

  • 斯洛文尼亚旅游 2015-01-09 20:21
    关注

    encodeURIComponent编码下发送的内容试试,应该是乱码了导致你的服务器出问题,你的回调函数里面又没有判断服务器错误的代码,就相当于没反应了

    
    xmlhttp.send("email="+encodeURIComponent($('email').value)+"&pwd="+encodeURIComponent($('pwd').value));
    

    回调增加错误处理

     xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {
          msg = xmlhttp.responseText;
            if( xmlhttp.status==200){/////////////
        if(msg == '1'){
            document.getElementById("login").innerHTML="登录成功!";
        }else if(msg=='2'){
            document.getElementById("login").innerHTML="用户名或密码错误!";
        }else{
            document.getElementById("login").innerHTML=msg;
        }
      }
    }else alert('php页面报错,返回内容为:'+msg);
    
    }
    

    对比1不成功是因为返回了空白字符,如你php页面内容的空白字符,BOM头之类的,要去掉空白字符后再对比

           msg = xmlhttp.responseText.replace(/^\s+|\s+$/g,'');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部