Ext-js 框架Bug(传回客户端的json对象被包在一对<pre>标签中)

简介:  After 2 hours hard work ,I have solved the problem in the demo of permanent progress bar.         事实上,Ext-js的框架的BUG依然存在,这个BUG就是,当你用Spring框架的.

 After 2 hours hard work ,I have solved the problem in the demo of permanent progress bar.

 


 


 

 

事实上,Ext-js的框架的BUG依然存在,这个BUG就是,当你用Spring框架的jackson生成一个json对象的时候,而你客户端Ext-js上传一个文件到服务器端的时候,服务器端的返回json对象里面,会使用application/jsonMIME类型,然后返回到客户端就会自动加上<pre></pre>标签,这个问题是框架本身的,没办法解决:

 

http://www.sencha.com/forum/showthread.php?17248-lt-pre-gt-json-lt-pre-gt-in-File-upload-response-%28FF-only%29

 

http://stackoverflow.com/questions/7023531/extjs-4-spring-3-file-upload-server-sends-bad-response-content-type

 

http://topic.csdn.net/u/20110830/15/2002bebf-2472-4d41-9a12-1b239fce2a9b.html

 

http://blog.nroed.com/2011/11/21/iframe-post-file/

 

 

 

我的解决思路,就是巧妙的绕过Extjs的框架,这次,我不再让服务器端的json对象存于@ResponseBody中,而是让服务器端编码方式改为text/html,同时,我在通用类中构建一个将对象转为JSONObject的方法:



 
 
  1. /** 
  2.  
  3.      * added by charles.wang to fix the ext-js framework bug 
  4.  
  5.      */ 
  6.  
  7.      public JSONObject getJSONFormat (){ 
  8.  
  9.          try
  10.  
  11.          JSONObject obj = new JSONObject(); 
  12.  
  13.          obj.put("success", success); 
  14.  
  15.          obj.put("data", data); 
  16.  
  17.          return obj; 
  18.  
  19.          }catch(Exception ex){ 
  20.  
  21.              return new JSONObject(); 
  22.  
  23.          } 
  24.  
  25.          
  26.  
  27.           
  28.  
  29.      } 

与此同时,我在Controller里面的调用封装的ExtJsonResponsegetJSONFormat()方法,让他们按照我们的意图在服务器端,按照我们自定义的方式,而不是Spring jackson框架的方式就转为了json对象,最后吧json对象打印到HttpServletResponse输出流中,这种情况下,我们打印出去的其实是json对象的toString()形式,而不再是json对象,因此不会被自动加上<pre>标签对

 



 
 
  1. Long endTime = System.currentTimeMillis(); 
  2.  
  3.  
  4.  
  5.    // calculate the timeForParsing and use "second" as the metric 
  6.  
  7.    Double timeForParsing = (endTime - startTime + 0.0D) / 1000
  8.  
  9.  
  10.  
  11.    // now construct the correct result 
  12.  
  13.    updateCAAssetResult.setSuccess(true); 
  14.  
  15.  
  16.  
  17.    List<String> updateSuccessData = new ArrayList<String>(); 
  18.  
  19.    updateSuccessData.add("更新CA资产成功,共用时" + timeForParsing + "秒."); 
  20.  
  21.    updateCAAssetResult.setData(updateSuccessData); 
  22.  
  23.  
  24.  
  25.    if (logger.isDebugEnabled()) { 
  26.  
  27.        logger.debug("CA update process successful"); 
  28.  
  29.    } 
  30.  
  31.  
  32.  
  33.    response.getWriter().print(updateCAAssetResult.getJSONFormat()); 

 

 

然后我们Extjs客户端,就无需要decode了, 因为我们发过来的是json String,而不是json对象,所以不要decode,直接从中提取信息,然后就解决了。


此方法得益于突然的灵感,这里记录下,以免以后忘记。^_^








本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/834237,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
2月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
2月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
30 1
JavaScript中对象的数据拷贝
|
2月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
59 4
|
2月前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
3月前
|
存储 JSON JavaScript
JavaScript JSON
【10月更文挑战第7天】JSON 是 JavaScript 中非常重要的一个数据格式,它为数据的表示和传输提供了一种简单而有效的方式。掌握 JSON 的使用方法和特点,对于开发高质量的 JavaScript 应用具有重要意义。
|
3月前
|
存储 JavaScript 前端开发
JavaScript 对象的概念
JavaScript 对象的概念
52 4
|
3月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
62 1
|
3月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
32 2
|
3月前
|
JavaScript 前端开发 Unix
Node.js 全局对象
10月更文挑战第5天
46 2