AJAX浅析数据交换的实现

在AJAX中,最常用的就是JSON,XML因为比较冗杂所以用的比较少。所以我们先来说基于JSON的数据交换。最后我们还会提到在数据交换中出现乱码的形式

基于JSON的数据交换

前端

前端接收到来自后端的JSON格式的字符串以后,需要将字符串转换为JSON对象:

var jsonStr = "{\"username\" : \"zhangsan\", \"password\" : \"1233344\"}" // 第一种方法 var jsonObj = JSON.parse(jsonStr) // 第二种方法 var jsonObj =  eval('(' + jsonStr + ')') 

第二种方法中加括号的原因是:

加圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。

后端

后端需要将需要传给前端的数据拼接成JSON格式的字符串。一个一个拼接太麻烦,我们选择使用阿里巴巴的fastjson组件,它可以将java对象转换成json格式的字符串

List studentList = new ArrayList<>(); while (rs.next()) { // 取出数据 String name = rs.getString("name"); int age = rs.getInt("age"); String addr = rs.getString("addr"); // 将以上数据封装成Student对象 Student s = new Student(name, age, addr); // 将Student对象放到List集合 studentList.add(s); } // 将List集合转换成json字符串 jsonStr = JSON.toJSONString(studentList); // 响应JSON格式的字符串给前端。 out.print(jsonStr);

基于XML的数据交换

前端

  使用XML完成数据交换 
序号姓名年龄

这里要注意,我们接受XML数据的方式不再是调用XMLHttpRequest对象的responseText属性,而是调用responseXML属性。

然后再通过getElementsByTagName方法获得标签进行遍历拼接。

后端

如果服务器响应的是XML数据的话,那么Servlet中的

response.setContentType("text/html;charset=UTF-8");

需要换成

response.setContentType("text/xml;charset=UTF-8");

至于XML数据字符串串的拼接这里不赘述了。

乱码问题

对于tomcat10来说,关于字符集,我们程序员不需要干涉,不会出现乱码。

对于tomcat9及以下版本来说呢?

响应中文的时候,会出现乱码,怎么解决?

response.setContentType("text/html;charset=UTF-8");

发送ajax post请求的时候,发送给服务器的数据,服务器接收之后乱码,怎么解决?

request.setCharacterEncoding("UTF-8");

到此这篇关于AJAX浅析数据交换的实现的文章就介绍到这了,更多相关AJAX数据交换内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

以上就是AJAX浅析数据交换的实现的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » jQuery 答疑