php面试题js跨域请求,JS跨域请求封装

该博客介绍了如何使用JavaScript封装一个跨域请求的函数,通过创建动态表单和iframe来实现POST请求的跨域。代码示例展示了如何在页面加载完成后调用此函数进行登录操作,并在请求成功后跳转到指定页面。
摘要由CSDN通过智能技术生成

因为要用到JS的跨域所以封装了一下:直接上代码

/**

* 异步请求JS

* url:执行跨域请求的url

* blankurl:跨域过程中请求域中的空白页面(空白即可) 必须要的

* data:跨域post请求的参数{"a":"1","b","2"}格式

* fn:请求之后的回掉函数

* @author :LYH

*/

var sync={

post:function (url,blankurl, data, fn){

var form = document.createElement("form");

form.id = form.name = 'postForm';

//创建表单数据

if (data) {

for(var key in data) {

var input = document.createElement("input");

input.type = "hidden";

input.name = key;

input.value = data[key];

form.appendChild(input);

}

}

//创建iframe

var iframe = null;

//try&catch是为了解决IE67创建iframe新开窗问题

try {

iframe = document.createElement('');

} catch (ex) {

iframe = document.createElement('iframe');

}

iframe.id = iframe.name = "postIframe";

iframe.width = "1";

iframe.height = "1";

iframe.style.display = "none";

document.body.appendChild(iframe);

//表单提交

document.body.appendChild(form);

form.action = url;

form.target = iframe.name;

form.method = "post";

form.submit();

//事件处理

if(iframe.attachEvent){

iframe.attachEvent("onload", _loadFn);

}else{

iframe.onload = _loadFn;

}

//记录iframe的状态

iframe.state = 0;

function _loadFn(){

if(iframe.state == 1){

var data = '';

try{

data = iframe.contentWindow.name;

}catch(e){

console.log(e);

}

//执行回掉

fn && fn(data);

//清除iframe;

iframe.onload = null;

document.body.removeChild(iframe);

}else if(iframe.state == 0){

iframe.state = 1;

iframe.contentWindow.location = blankurl

}

}

}

}

把上面代码放到一个js文件中命名位 asyncpost.js 然后页面引用 例如:

//加载完开始执行

window.onload = function(){

sync.post("${config.siteLoginurl}","sso_blank.jspx",{

"${config.siteAccount}":"${username}",

"${config.sitePassword}":"${password}",

"${key}":"${param_list[key]}",

#list>

},function(data){

console.log(data);

window.location.href="${config.siteIndexurl}";

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值