最近做的一个web项目里,在使用ajax验证登录信息的时候本人为了图方便没有使用json串的方式从后台传输信息,直接使用了text纯文本的方式把后台的字符串返回到前端,项目里具体实现是当后台检测到用户登录时返回用户名,如果监测到未登录则返回"notLogin"字符串。
以下是前端代码:
$.post("indexServlet",{infor:"loginStatus"},function(data){
//if($.trim(data)=="notLogin"){
if(data=="notLogin"){
return
}else{
var name = data;
var login = $("#login");
login.empty();
login.append('<a href="#" id="bnt-login">'+name+'</a> | '+
'<a href="#" id="bnt-signout">退出</a>');
}
},"text");
就是在这里我遇到了一个大坑,以前使用json解析后台字符的时候直接通过键值对获取文本内容完全没有问题,但是现在使用text的时候问题出现了,在这里data=="notLogin"的判断永远为false,这我就很迷茫了,然后在代码里加上了console.log(data)和console.log(data==“notLogin”)在控制台里输出data信息,以下是结果输出结果:
返回值明明就是notLogin,可是和字符串"notLogin"作比较它就是不相等,难不成是多了一些看不见的字符?于是我就打起了data返回值的主意,输出了data的长度length,结果长度为10
这里我又尝试了从后台返回不同长度的字符串,发现控制台输出的字符长度和看到的字符串长度差值始终为2。到这里原因就很明显了,当dataType为text时,ajax与后台交互获取的text其后会加上两个字节长度的结束字符。知道了这茬,我在比较的时候尝试用上trim方法过滤一次data,果然就世界和平了。
代码如下:
$.post("indexServlet",{infor:"loginStatus"},function(data){
if($.trim(data)=="notLogin"){
return
}else{
var name = data;
var login = $("#login");
login.empty();
login.append('<a href="#" id="bnt-login">'+name+'</a> | '+
'<a href="#" id="bnt-signout">退出</a>');
}
},"text");
以上是我在使用text类型获取返回值的时候遇到的问题,**值得一提的是因为输出没有换行,并且使用trim方法(trim方法能过滤字符串首尾的空格)就能过滤掉,因此可以确定最后的那两个结束符都是空格。但奇怪的是这两个空格并不是普通的空格,为了确定那两个字符的编码我尝试过在if语句中的"notLogin"后加上两个空格,将其变为"notLogin "再进行比较,令人失望的是返回值依旧为false。**查阅了官方文档我也没有看到关于那两个结束字符的由来说明,希望有发现个中奥秘的大佬不吝赐教,感激不尽!
因为之前都是用json的方式获取返回值,这次为了图方便用了text结果反而调了更久,很伤。本来是很小的一个细节,但影响很大,这个故事告诉我们,json真香,没事儿别偷懒!