开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
分布式服务器框架之Servers.Core库中实现MongoDB的ObjectId和Json转换
分布式服务器框架之Servers.Core库中实现MongoDB的ObjectId和Json转换
0 0
通过SpringMVC框架响应JSON数据
通过SpringMVC框架响应JSON数据
0 0
Go实战--也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)
ris自称是Go语言中所有Web框架最快的,它的特点如下: 1.聚焦高性能 2.健壮的静态路由支持和通配符子域名支持。 3.
1239 0
Scrapy框架-模拟登录之JWT验证及post特殊格式数据(json)
一、背景 之前有记录过普通的scrapy模拟登录,这种方法可以满足了日常爬虫的登录需求。 但是技术一直在进步,近几年前后端分离的趋势越来越好,很多web都采用前后端分离的技术。
1381 0
scrapy框架-将数据写入json文件
使用背景 有时候为了做测试,不想去数据库设置字段,设置musql字段实在是太麻烦了,这种情况下可以先把存储到json文件中,并观察数据的正确性,如果数据没问题了,再改成mysql存储即可。
1155 0
Json解析框架之Gson详解
好东西,大家享 原文来自:http://www.iamxiarui.com/2016/08/30/android 原文作者:iamxiarui 1、简单的JSON数据进行解析 [ { "name": "zhangsan", "ag...
697 0
推特开源的Serial,轻量级,快速的json解析框架
你还在用Gson,fastjson吗?最近几个月推特开源了她们的json解析和序列化框架 Serial,这是一个轻量级框架,操作起来也很简单。下面简单的介绍一下。
697 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载