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

  • 相关阅读:
    【面试】代码默写-DCL单例
    【状态机】SCXML2
    【面试】JVM
    【面试】HashMap
    读取resource下sql脚本并执行
    Maven 二进制资源文件(excel pdf...)部署出错,乱码的解决方案
    【JVM】java内存模型
    【Spring】源码二、IOC
    mapstruct 高级用法
    warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 6.0, but the range of supported deployment target versions is 8.0 to 13.2.99.
  • 原文地址:https://www.cnblogs.com/runfeng/p/2847706.html
Copyright © 2011-2022 走看看