js跨域问题

跨域问题,网上资料很多,但是太多复制粘贴,还错误百出,这里我总得说一下吧

  1. 第一个方法就是jsonp,这个只能采用get方式请求,具体自己百度,由于post用的多,我不喜欢这个方法,直接淘汰
  2. 第二个方法就是cros跨域,服务端要设置响应头如下
    header("Access-Control-Allow-Credentials", true)
    header("Access-Control-Allow-Origin", request.getHeader("Origin"))
    注意
    "Access-Control-Allow-Origin"不能设置成"*"
然后就是客户端,现在的浏览器一般都会支持,直接用原生js写的话如下
function createCORSRequest(method,url){
    var xhr=new XMLHttpRequest();
    if("withCredentials" in xhr){
        xhr.open(method,url,true);
    }else if(typeof XDomainRequest != "undefined"){//IE10之前的版本使用XDmainRequest支持CORS
        xhr=new XDomainRequest();
        xhr.open(method,url);
    }else{
        xhr=null;
    }
    xhr.withCredentials = true;
    return xhr;
}
var request=createCORSRequest("post","请求的url");
if(request){
    request.οnlοad=function(data){
        alert(data);
    };
    request.send();
}

其中   xhr.withCredentials = true; 是跨域关键


如果用jquery写的话就比较简单了

$.ajax({
	type : "post",
	url : "请求的url",
	dataType:"json",
	xhrFields: {
        withCredentials:true
    },
	success : function(msg){
		alert(msg.ret);
	}
});

如果要携带cookie的话,cookie设置成主域名,就可以携带了,当然这是在主域名相同的情况下,二级域名之间的跨域才可以传递cookie

这里我要强调一下用jquery写的话虽然简单,但是要注意jquery插件版本,如果是低版本或者min版本,有可能会不支持这种cros跨域,博主1.7.3的可以用,我曾经就因为用的低版本的min版本,怎么也成功不了,希望猿友们少走点弯路!




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 跨域问题可以通过设置响应头来解决。一般情况下,跨域请求触发浏览器的跨域限制,需要在服务器端设置响应头来允许跨域访问。 以下是一些解决跨域问题的方法: 1. 使用中间件:可以使用 `cors` 中间件,它可以在 API 中简单地添加跨域支持。安装 `cors` 中间件:`npm install cors --save`。使用方法: ```javascript const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors()); ``` 2. 手动设置响应头:在服务器端设置响应头来允许跨域访问。以下是示例代码: ```javascript app.use(function(req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有来源访问 res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE'); // 允许访问的方式 res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); // 允许请求头中携带的参数 next(); }); ``` 3. 使用代理:在客户端发出请求,可以使用代理将请求发送到同一个域名下的服务器,然后在服务器上进行跨域请求。以下是示例代码: ```javascript const http = require('http'); const proxy = require('http-proxy'); const apiProxy = proxy.createProxyServer(); const server = http.createServer(function(req, res) { const url = req.url; if(url.match(/^\/api/)) { apiProxy.web(req, res, { target: 'http://localhost:3000' }); } else { // 处理其他请求 } }); server.listen(8080); ``` 以上是三种常见的解决跨域问题的方法。根据实际情况选择合适的方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值