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

1 篇文章 0 订阅

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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你的Echarts图表需要通过后台返回字符串显示在tooltip中,可以使用formatter回调函数来实现。 例如,你可以通过Ajax请求从后台获取数据,并将数据以字符串的形式返回。在Echarts的tooltip的formatter回调函数中,你可以使用参数params中的data属性来获取当前数据项的值,并将其与从后台获取的字符串拼接起来,最后返回一个字符串作为提示框内容。 下面是一个示例代码: ```javascript option = { tooltip: { formatter: function(params) { var data = params.data; // 获取当前数据项的值 var str = ''; // 用来存储后台返回字符串 $.ajax({ url: 'your_backend_url', // 后台请求地址 dataType: 'json', async: false, // 设置为同步请求 success: function(res) { str = res.data; // 获取后台返回字符串 } }); return data + ' ' + str; // 将后台返回字符串与当前数据项的值拼接起来,作为提示框内容返回 } }, series: [{ type: 'bar', data: [10, 20, 30, 40, 50] }] }; ``` 在上述代码中,我们定义了一个柱状图,并将tooltip的formatter回调函数设置为一个匿名函数。在该函数中,我们首先通过params.data获取当前数据项的值,然后通过Ajax请求从后台获取字符串,并将字符串与数据项的值拼接起来作为提示框内容返回。需要注意的是,由于Ajax请求是异步的,为了确保在返回字符串之前不会返回提示框内容,我们将Ajax请求设置为同步模式(async: false)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值