xuesan18 2015-01-10 03: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条回答 默认 最新

  • Go 旅城通票 2015-01-10 04: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条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题