分布式前端跨域传参POST案例

在A服务器的页面需要向B服务器的后端POST大量数据,但受到GET请求字符限制。通过创建B系统的一个新页面作为中介,利用前端AJAX进行JSONP请求无法满足需求。最终解决方案是在A系统页面直接提交到B系统的新页面,从而实现跨域POST传递参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开发遇到一个问题:在A服务器系统上页面form提交到B服务器系统上后端的方法,并且传输数据不能有限制。
例如:
A页面:
这里写图片描述
审核意见>1000字以上
点击通过 提交到 B系统后端方法

前端访问跨域一般使用:
$.ajax({
url:”“,
dataType:”jsonp”,
jsonpCallback:”person”,
success:function(data) {
//处理回调函数
}
})
但是这个方法为get,传输数据字符受限制,所以这个方法并不适用。
网上找了一些关于如何解决这个办法的资料:https://www.cnblogs.com/mingxiastory/p/5470350.html

最后解决办法:
在A系统页面:

<!-- 在A页面使用iframe加载B系统页面 -->
<div>
 <iframe src="<@url value='/wf/processAction/iframeForm'/>" id="iframe" style="display:none ;"></iframe>
 </div>
//点击按钮的onclick方法
    function checkSubmit(vlue){
            $("#checkDiv input[name='actionId']").val(vlue);
            var adderId = $("#checkDiv input[name='adderId']").val();
            var adderName = $("#checkDiv #adderId").val();
            var auditNote = $("#checkDiv textarea").val();
            var actionId = $("#checkDiv input[name='actionId']").val();
            var nodeAuditorId=$("#checkDiv input[name='nodeAuditorId']").val();
            var signType=$("#countersignDiv input[name='signType']").val();
            //var formUrl=$("#checkDiv form").attr("action");
            var formUrl="/wf/processAction/approval";
            var data={"adderId":adderId,"adderName":adderName,"auditNote":auditNote,"actionId":actionId,"nodeAuditorId":nodeAuditorId,"signType":signType,"formUrl":formUrl};
            var href=$("#iframe").attr("src");
            var o = document.getElementsByTagName('iframe')[0];     
            o.contentWindow.postMessage(data,href);
        }
        //B系统页面返回消息 监听器
        window.addEventListener('message', function(e) {
            var href=$("#iframe").attr("src").replace("/wf/processAction/iframeForm","");
            if(e.origin === href){
                if(e.data != null){
                    $.actionDialog({message: e.data["message"]});
                    if(e.data["action"]==="info"){
                        setTimeout(function () {
                           window.location.reload();
                        }, 1000);
                    }
                }else{
                     alert("返回数据为空");
                }
           }
        }, false)
        </@js>

在B系统 新增一个新页面 用于提交

    <div>
    </div>
    <@js src="/widget/jquery/jquery-1.11.3.min.js"/><@jsRender/>
    <@js>
    //监听器 获取父窗口发送的消息
    window.addEventListener('message', function(e) {
    var action;
    var message;
    if(e!=null){
    $.ajax({
            type: 'post',
            async:false,
            url: e.data["formUrl"],
            data: {
                "adderId": e.data["adderId"],
                "adderName": e.data["adderName"],
                "auditNote": e.data["auditNote"],
                "actionId": e.data["actionId"],
                "nodeAuditorId": e.data["nodeAuditorId"],
                "signType": e.data["signType"],
            },
            dataType: "json",
            success: function(date) {
                if(date) {
                    action=date["action"];
                    message=date["message"];
                } 
            },
            error: function(date) {
                action=date["action"];
                message=date["message"];
            }
        });
        var data={"action":action,"message":message};
        //返回消息
        e.source.postMessage(data, event.origin);
    }   
    }, false);
    </@js>
    <@jsRender/>

这样就实现了post 前端 跨域传参问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值