我做了个简单的html登陆表单,点击提交按钮,异步提交验证。php文件连接数据库验证用户名密码,对则echo一个字符串‘true’,错了则无输出值。返给html后,做判断,再做响应动作。可我测试时发现,不管输错输对,页面均是输对的动作。php部分是正确的,可以根据表单提交数据输出响应的值,我觉得bug在客户端部分,怎么改都不对,望各位大神帮帮忙。以下是客户端脚本:
回复讨论(解决方案) 输错时,控制台输出data是什么?
输错时,无输出。这是我php代码部分:
输错时,控制台输出data是什么?
输错时,无输出。这是我php代码部分:
我是说输错时
console.log(data+' '+typeof data);
console.log(data=='true');
这两句输出什么?
我是说输错时
console.log(data+' '+typeof data);
console.log(data=='true');
这两句输出什么?
test.html:38 string
test.html:39 false 看看你的表单
看看你的表单
谢大神帮我分析,以下是html内容
nbsp;html>
document
用户名
密 码
看看你的表单
这个js脚本是我改成了直接使用jq的ajax()方法异步提交,想看看是不是ajaxsubmit插件出了问题。结果还是一样,客户端根本不识别php返回来的字符串。 这样测试 $(function() { //最好这样包起来,以防 jq 加载太慢 $('#btn').click(function () { $.ajax({ url:'plane/login.php', type:'post', data:{ 'name_login':'fengjie', 'psw_login':'123123', }, success:function(data) { alert(data); //直接查看返回的数据,如果 php 有问题,一样能看到 } }) })})
这样测试 $(function() { //最好这样包起来,以防 jq 加载太慢 $('#btn').click(function () { $.ajax({ url:'plane/login.php', type:'post', data:{ 'name_login':'fengjie', 'psw_login':'123123', }, success:function(data) { alert(data); //直接查看返回的数据,如果 php 有问题,一样能看到 } }) })})
测试了,如果用户名密码写对了,弹窗提示‘true’,若果错的,弹窗为空。我现在的问题是,如果php返回’true‘,js脚本这边的判断句data==‘true’的结果是false,怎么可能是false???php返回的就是字符串类型的‘true’啊! alert(data.length); //看一下返回数据的长度
alert(data.length); //看一下返回数据的长度
输对了,长度是5,输错了长度是1。奇怪了,返回空的怎么还有长度? 因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charcodeat(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 bom 头
看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了
因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charcodeat(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 bom 头
看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了
我测试了,输对了内码显示是116,输错了内码显示9。怎么还不一样呢?
因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charcodeat(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 bom 头
看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了
我测试了,输对了内码显示是116,输错了内码显示9。怎么还不一样呢?
如果输对了,charcodeat(4)就是9,这个跟输错时,charcodeat(0)相同,看来确实我以为php返回为空,其实是返回了一个编码为9的字符。
因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charcodeat(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 bom 头
看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了
我测试了,输对了内码显示是116,输错了内码显示9。怎么还不一样呢?
如果输对了,charcodeat(4)就是9,这个跟输错时,charcodeat(0)相同,看来确实我以为php返回为空,其实是返回了一个编码为9的字符。
我php那边无论输出‘true’还是‘false’甚至无输出时,js脚本这边接收的data字符串的最后都自动加了编码为9的字符,好奇怪! 你把程序文件的 bom 头去掉就行了
你把程序文件的 bom 头去掉就行了
谢大神,我用了trim,整个程序就正常了。但这样治标不治本,我还没弄清这个bom头是怎么加进去的,网上有说是编辑器的原因,我用的editplus,看来得换个编辑器试试。 保存文件时选择 utf-8 无 bom
保存文件时选择 utf-8 无 bom
我看了editplus的首选项,默认保存就是utf-8无bom 那还要看 标记外是否有空格、空行之类的
那还要看 标记外是否有空格、空行之类的
我查了php文件,果然是标记外有个制表符,哎,刚学php,埋了太多雷啊,膜拜大神!