Ajax后台交互之坑:后台返回text与字符串比较问题

本文分享了一个关于使用AJAX与text类型返回值时遇到的问题,详细讲述了当后台返回字符串与预期比较不一致的原因及解决办法。指出在dataType为text时,返回的字符串末尾会额外附带两个不可见字符,使用trim方法可有效解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做的一个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
console.log(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真香,没事儿别偷懒!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值