跨域请求的几种实现方式(实例)

最近要实现一个需求,从某一个系统跳转到另外一个系统,这其中涉及到了跨域,通过网上查找资料和自己的理解实现了该功能,现在做个笔记

方式一:通过a链接直接跳转

<a href="javascript:void(0);" style="color: #0b6190;" onclick="openPostWindow('https://xxxxx/redirectInit.htm','SK201')">SK201</a>

//url要跳转到的页面,data要传递的数据,name显示方式(重开页面或者当前页面跳转)
    function openPostWindow(url, protocolNo) {
        name = "_blank"; // 重新打开一个页面
        var tempForm = $("<form>");
        tempForm.attr("id", "tempForm1");
        tempForm.attr("style", "display:none");
        tempForm.attr("target", name);
        tempForm.attr("method", "post");
        tempForm.attr("action", url);
        var input2 = $("<input>");
        input2.attr("type", "hidden");
        input2.attr("name", "protocolNo");
        input2.attr("value", protocolNo);
        tempForm.append(input2);
        tempForm.trigger("submit");
        $("body").append(tempForm);//将表单放置在web中
        tempForm.submit();
        $("tempForm1").remove();
    };

方式二:通过Ajax方式的jsonp

// js代码            
var mobilephone = $("[name=mobilephone]").val();
if (mobilephone == ""){
  $(".notice").html("请输入手机号!");
  $(".notice").show();
  return false;
}
$.ajax({
   type: "get",
   url: "/login/getYzm.htm",
   dataType:"jsonp",    //跨域json请求一定是jsonp
   jsonp: "callbackparam",    //跨域请求的参数名,默认是callback
   data:{"mobilephone":mobilephone},    //请求参数
   success : function(data){
      var status = data.status;
   }
});

后台代码以及返回数据封装;

方式三:也是通过ajax,后台只需在response添加响应头Header("Access-Control-Allow-Origin", "*")即可

注意:此种方式允许所有域名访问,不安全,不建议使用

js代码:

var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
            type: "POST",
            url: "/uploadAssessImg.json",
            data:formData,    //请求参数
            cache: false,
            processData: false,
            contentType: false,
            success : function(result){
                alert(111);
            }
        });

 后台代码:

@ResponseBody
	@RequestMapping(value = "/uploadAssessImg", method = RequestMethod.POST)
	public com.alibaba.fastjson.JSONObject uploadAssessImg(MultipartHttpServletRequest request,HttpServletResponse response) {
		logger.info("跨域请求==========进入方法");
		response.setHeader("Access-Control-Allow-Origin", "*");
		com.alibaba.fastjson.JSONObject jsonObject = null;
		try {
			jsonObject = icommonService.uploadInBatches(request);
			logger.info("跨域请求==========结果返回"+jsonObject.toJSONString());
		} catch (Exception e) {
			logger.info("上传图片异常:" + e.getMessage());
		}

		return jsonObject;
	}

方式四:后台采用拦截器方式

具体地址:拦截器方式解决跨域问题_crossinterceptor-CSDN博客

方式五:使用Nginx解决跨域(推荐)

请看我的另外一篇文章:Nginx解决跨域问题_nginx 一个域名加不同路径访问跨域不同的域名-CSDN博客

方式六:使用document.domain实现 

document.domain 是 JavaScript 的一个属性,用于获取或设置当前文档的域名。它的主要用途是处理跨域问题,即在不同域名下的网页之间进行数据交互。

具体来说,当两个网页的域名、端口和协议都一致时,它们之间可以互相访问数据,这被称为同源策略。然而,在实际开发中,经常会遇到不同域名下的网页需要进行数据交互的情况,这时就需要用到 document.domain 属性。

通过设置 document.domain,可以将当前文档的域名设置为服务器的主机名,从而实现不同域名下的网页之间的跨域访问。例如,如果要将一个子域下的网页与主域下的网页进行跨域访问,可以将子域的网页中的 document.domain 设置为主域的域名,这样两个网页就可以互相访问数据了。

需要注意的是,document.domain 属性的设置有限制,只能设置为当前域名或上级域名,且必须包含一个点号。同时,为了防止恶意修改,浏览器会对 document.domain 属性的设置进行安全限制。

样例:

document.domain=-1<document.domain.indexOf(".xiatengtest")?document.domain.substring(document.domain.indexOf(".xiatengtest")+1):document.domain;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值