zoukankan      html  css  js  c++  java
  • jsonp

    使用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;
     }?
    本篇文章来源于突袭网[www.tuxi.com.cn] 原文链接:http://www.tuxi.com.cn/6-171-1710083.html

  • 相关阅读:
    table首行固定
    JavaScript获取当前日期,昨天,今天日期以及任意天数间隔日期
    Struts2二级菜单联动
    Servlet和Struts2同时使用
    最近的感想
    java.lang.NoClassDefFoundError: javax/el/ELResolver 问题解决
    Event Loop、函数式编程、IO多路复用、事件驱动、响应式、
    Git 的使用(一)
    Linux 硬链接与软链接 目录结构
    并发、并行、同步、异步相关感念
  • 原文地址:https://www.cnblogs.com/runfeng/p/2847706.html
Copyright © 2011-2022 走看看