Ajax跨域访问SSH action问题

最近在完善系统项目,选择了远程调用原SSH项目中的已有action处理请求,也涉及到了跨域问题,没有系统的解决过,所以此次查询解决过程也是一个很好的学习经历。Ajax跨域一般使用的方法有:

  1. 通过Flash插件发送HTTP请求,这种方式可以绕过浏览器的安全限制,但必须安装Flash插件,并与它进行一定的交互,使用较少。
  2. 通过在同源域名下架设一个代理服务器来转发,JS负责把请求发送到代理服务器上
  3. JSONP 主要用于主流浏览器的跨域数据访问问题
  4. CORS 跨域资源共享,是一种允许当前域的资源被其他域的脚本请求访问机制,如果浏览器支持HTML5,那么就可以一劳永逸的使用新的策略:CORS进行跨域,服务器端对CORS的支持主要是通过设置Access-Control-Allow-Origin来进行的。
 
这里只是简单阐述了几种常见的跨域方法,在这里主要讨论的是JSONP进行跨域。
 <script language="javascript">
        $(document).ready(function () {
            $("#button").click(function () {
                var user = $("#User").val();
                var password = $("#Password").val();
                $.ajax({
                    url: "http://ip:8080/Test/ajax_json/jiadan.action",
                    asynnc:false,
                    cache:false,
                    data: {
                        'User' : user,
                        'Password' : password
                    },
                    dataType: 'jsonp',
                    jsonp:"callback",
                    type: 'post',
                    success: function (data) {
                        alert("成功");
                        console.log(data);
                    },
                    error:function(data){
                        alert("错误");
                        console.log(data);
                    }
                });
            });
        });
    </script>
访问的是SSH项目中的struts,在struts中设置
 
<package name="ajax_json" extends="json-default">
<action name="jiadan" class="modelsave" method="text"><result name="success" type="json">
<param name="root">results</param>
<param name="callbackParameter">callback</param></result>
</action>
</package>
 
param设置的是返回参数,在action类中必须有set、get方法,callback是回调函数名称,否则前端接收到的都是error信息,不会进入success,callback可以不赋予回调函数名称,当然也可以自定义函数名称
jsonpCallback:'jsonpCallback'
前端接收到的data就是param设置的results
ps:默认设置下ajax的请求均为异步请求,如果将async设置为false,请求为同步请求,浏览器将会锁住,执行完一个请求才会执行下一个请求。
 
其实还可以采用一种方法,在action中设置response头部的值为:
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Access-Control-Allow-Origin", "*");
前端可以不使用jsonp进行跨域,不过这种方法不安全,不建议使用。
 
 

 

 

 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值