最近开发遇到一个问题:在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 前端 跨域传参问题。