开发者社区> 问答> 正文

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();
}
?>

展开
收起
小旋风柴进 2016-03-06 12:47:14 2428 0
1 条回答
写回答
取消 提交回答
  • 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,'');`
    2019-07-17 18:54:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载