ajax跨域问题

1.如果自己能够控制服务端,则可以在服务端加上这句:response.setHeader("Access-Control-Allow-Origin", "*");

但是这个方法有个问题:就是ie不支持。所以也没什么用了。

2.如果用jsonp的方法都可以解决问题。但是用jsonp只能用get方法,不能用post方法。所以,我们可以把post的方法用get的实现。

客户端的代码如下:

$.ajax({
   type: 'GET',
   async:false,
   url: web_path  + '/grid/onlineparam/getonlineparam.do',
   crossDomain: true,
   data: {'projectid': projectid, 'page': 1, 'rows': 10},
   dataType: 'jsonp',
   jsonp: 'jsoncallback',
   success: function(responseData, textStatus, jqXHR) {
    $('#datagrid').datagrid('loadData', responseData);
   }
});


服务器的关键代码如下(要写回调函数):

。。。省略其他代码

String callback= request.getParameter("jsoncallback");  

String data = callback+"(" + m.toJSONString() + ")" ;
return data;


完整代码如下(用spring mvc,其中method = {RequestMethod.POST, RequestMethod.GET},可以支持post和get方法。

produces = {"application/json;charset=UTF-8"},解决中文乱码)


@RequestMapping(value = "/grid/onlineparam/addonlineparam", method = {RequestMethod.POST, RequestMethod.GET},produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String addOnlineParam(HttpServletResponse response, HttpServletRequest request,
@RequestParam(value = "projectid", required = true) String projectid,
@RequestParam(value = "paramname", required = true) String paramname,
@RequestParam(value = "paramvalue", required = true) String paramvalue,
@RequestParam(value = "remark", required = true) String remark){
message m = new message();
String callback= request.getParameter("jsoncallback");  
projectid = Function.dealNull(projectid);
paramname = Function.dealNull(paramname);
paramvalue = Function.dealNull(paramvalue);
remark = Function.dealNull(remark);

try { 
/*务业处理代码*/
m.setResult("00");
m.setDetail("操作成功!");
} catch (Exception e) {
m.setResult("01");
m.setDetail("操作失败!");
}

String data = callback+"(" + m.toJSONString() + ")" ;
return data;
}


3.第三种方法是用iframe方式实现。设置document.domain。但是这种方法只能是两者在同一子域下面。如download.test.com和haha.test.com就是同一子域。

可设document.domain="test.com"。但如果是downloadtest.com和haha.test.com就不是同一域下了。


总结下:目前最好的实现方式,我觉得是第二法用jsonp的型式。

其实jsonp理的原理还是用<script src="server.do?jsonp=callback&id=1"></script>来实现的。

<script type="text/javascript">

function callback(服务器返加的json格式的数据){//回调函数

处理代码。。。。

}

</script>


补充一个:由于跨域只是在js之间存在跨域,因为可以写一个服务作为代理跳转,用平台去访问,这样就不存在跨域了。如前端(和最终的服务器不同域)---->服务---->最终的服务器,而不是前端(和最终的服务器不同域)--->最终的服务器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值