1.1、用form表单提交数据来解决跨域问题
用js处理form表单提交,通过动态给form元素赋值,来进行设置接口地址。在form标签上写入这就代码 enctype="multipart/form-data" :这句代码指定form表单提交时的编码格式为utf-8. 通过用一个隐藏的 iframe标签,用target="hidden_frame",来解决form表单提交时跳转页面的问题。
1.2、post跨域解决方案
需要前后端配合设置解决跨域问题,后端需要做的是开启CORS,允许特定域名进行跨域访问。
当你使用XMLHttpRequest发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin;浏览器判断该相应头中是否包含Origin的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。如下图
(1)、zepto ajax提交 代码如下
$.ajax({
type: 'post',
url: url,
data:{
'selfSummary':S.one(".form-control").val(),
'merchantCode':'160315133351031001',
},
contentType:'application/x-www-form-urlencoded;charset=UTF-8',
success: function(data){
console.log(JSON.parse(data));
//this.append(data.project.html)
},
error: function(xhr, type){
alert('Ajax error!')
}
解析:contentType:'application/x-www-form-urlencoded;charset=UTF-8', 这句代码如果没有,可以 进行跨域提交,但会出现中文汉字乱码问题;application/x-www-form-urlencoded 可以进行跨域请 求;charset=UTF-8 设定编码格式,如果没有则会乱码。
(2)、KISSY post提交
S.IO({
type:'post',
url: 'https://dev.teenker.com/iteenker-business- center/teenker/merchant/businessCard/update.html',
data:{
'selfSummary':S.one(".form-control").val(),
'merchantCode':'160315133351031001',
"cc":{"sdf":1,"sdf":2},
},
crossDomain:true,
contentType:'application/x-www-form-urlencoded;charset=UTF-8',
success:function(responseData){
console.log(responseData);
},
error:function(responseData){
Notification.simple("请求失败,请稍后再试",'',2000);
}
});
解析:crossDomain:true, 表示允许跨域;
CORS的本质让服务器通过新增响应头Access-Control-Allow-Origin,通过HTTP方式来实现资源 共享,让每个请求的服务直接返回资源.它使用了HTTP交互方式来确定请求源是否有资格请求该资 源,并且通过设置HTTP Header来控制访问资源的权限.