文档章节

使用Ext2的ScriptTagProxy对Struts2下的Jsonplugin进行AJAX跨域访问时的问题以及解决方案

pior
 pior
发布于 2014/09/05 13:49
字数 424
阅读 8
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

使用HttpProxy不能进行跨域的访问``

会返回 Access to restricted URI denied" code: "1012 的错误```

用Ext.data.ScriptTagProxy替换HttpProxy可以实现跨域``

在Opera下正常``在Firefox下出现Invaild label错误``

原因在`

使用ScriptTagProxy时要从request参数中获得callback属性,把得到的参数跟json-data一起返回,因为返回的data是要在浏览器中执行的所以仅仅返回json-data是不够的,需要构造成

callBackName(json-data);

这种形式返回。

JAVA 代码如下:

String cb = request.getParameter("callback");//获得callback属性

response.getWriter()write(cb + “(”+ json-data + ");");//将json-data进行重新包装 
 如果使用struts2+jsonplugin的方式```

它默认的是返回json的数据部分````

就不能直接用JSONPLUGIN的拦截器````只能对ACTION进行改进``

首先要在ACTION里添加一个对从ScriptTagProxy传来的callback参数的接收方法``

程序代码
private String callback;
 public String getCallback() {
  return callback;
 }

 public void setCallback(String callback) {
  this.callback = callback;
 }
 

这里的参数名可以更改``

在scriptTagProxy中设置callback参数:callbackParam,如:

程序代码
proxy : new Ext.data.ScriptTagProxy({
   url :'http://192.168.1.54:8080/LEOSystem/json.txt'// 'http://extjs.com/forum/topics-remote.php',
   callbackParam: abc
  })
 

 

action中的方法就是改为

然后就是要手工用response实现数据的回传.

在execte()方法中:

程序代码
try {  
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/html");
   response.setCharacterEncoding("UTF-8");
   response
     .getWriter()
     .write(
       getCallback()
         + "("+JSONUtil.serialize(this)+");");
  } catch (JSONException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }

  return null;
 

JSONUtil类来自jsonplugin包```import com.googlecode.jsonplugin.JSONUtil;

它的serialize(Object)方法实现了从类到json数据字串的转化.

最后返回return null;`不再让struts2接手```

程序代码
private String abc;
 public String getAbc() {
  return abc;
 }

 public void setAbc(String abc) {
  this.abc= abc;
 }
 

本文转载自:http://pior.iteye.com/blog/889967

pior
粉丝 27
博文 151
码字总数 22496
作品 0
济南
高级程序员
私信 提问
struts2.0和jQuery1.5的json问题

项目中通过jsonplugin-0.21.jar做json和struts2的整合。前台用jQuery1.5。 调用jquery的ajax方法时,总是出现“parsererror”错误。 在ajax的error回调中弹出异常信息。 error: function(XM...

lwei
2011/08/06
252
0
struts2 + json 包冲突问题

在用strtus2的json插件读取数据时,出现了包冲突的问题,搞了老半天才解决, 严重: Servlet.service() for servlet default threw exception java.lang.NoClassDefFoundError: com/opensymph...

王二铁
2011/08/22
1K
0
AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?

ajax是异步的 JavaScript 和 XML。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 交互流程: 1-...

wangwenya
2014/09/07
2.9K
1
ajax跨域问题我只学一种解决方案

Ajax跨域问题的jsonp解决方案 在前端我们经常会使用Ajax来向服务器发送请求和接收服务器响应回来的数据,一般来说在同一个服务器的数据来往是没有什么问题的,但是有时使用Ajax请求数据并不局限...

JH30K
10/05
0
0
AJAX POST&跨域 解决方案 - CORS

 跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不...

zyt_1978
2016/03/28
91
0

没有更多内容

加载失败,请刷新页面

加载更多

在C语言中“静态”是什么意思?

我已经在C代码的不同地方看到了static一词。 这就像C#中的静态函数/类(实现在对象之间共享)吗? #1楼 多文件变量作用域示例 在这里,我说明了静态如何影响多个文件中函数定义的范围。 交流...

javail
4分钟前
3
0
利用 FC + OSS 快速搭建 Serverless 实时按需图像处理服务

作者:泽尘 简介 随着具有不同屏幕尺寸和分辨率设备的爆炸式增长,开发人员经常需要提供各种尺寸的图像,从而确保良好的用户体验。目前比较常见的做法是预先为一份图像存放多份具有不同尺寸的...

阿里巴巴云原生
7分钟前
2
0
前端架构最佳实践

Folders-by-Feature Structure 胜过 Folders-by-Type Structure

lilugirl
17分钟前
3
0
Seata AT 模式启动源码分析

从上一篇文章「分布式事务中间件Seata的设计原理」讲了下 Seata AT 模式的一些设计原理,从中也知道了 AT 模式的三个角色(RM、TM、TC),接下来我会更新 Seata 源码分析系列文章。今天就来分...

后端进阶
19分钟前
3
0
Python中“自我”一词的目的是什么?

Python中self词的目的是什么? 我知道它是指从该类创建的特定对象,但是我看不到为什么要将它显式地作为参数添加到每个函数中。 为了说明这一点,在Ruby中,我可以这样做: class myClass ...

技术盛宴
20分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部