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

目录
打赏
0
0
0
0
234
分享
相关文章
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
869 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Vue.js:现代前端开发的强大框架
【10月更文挑战第11天】Vue.js:现代前端开发的强大框架
154 41
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
83 2
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
89 4
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
112 4
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
140 1

热门文章

最新文章