解决 jquery使用ajax请求发生跨域问题的办法

解决 jquery使用ajax请求发生跨域问题的办法

问题描述

我在使用jquery的ajax请求后台数据的时候发生了跨域的问题,在网上查了很多办法都是说添加这个 dataType: ‘jsonp’,但是我使用过后没有效果,最后我用Node写了一个服务器做代理解决了这个问题。

解决步骤

1.编写node服务器

关于node我就不做介绍了,直接看代码吧(写了一个非常简单的例子),代码里面引入的有些包是不需要的请自行删除。

//引入express框架
const express = require('express');
//路径处理模块
const path = require('path');
const formidable = require('formidable')
const fields = require('fields')
const bodyParser = require('body-parser')
const request = require('request');
const { json } = require('body-parser');
//创建web服务器
const app = express();

//处理参数
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
    extended: false
}))
//静态资源访问服务功能
app.use(express.static(path.join(__dirname, 'public')));

//拦截所有请求
/* app.use((req, res, next) => {
    //1.允许哪些客户端访问我
    // *代表允许所有的客户端访问我
    //注意:如果跨域请求中涉及到cookie信息传递,值不可以为*号

    res.header('Access-Control-Allow-Origin', 'http://localhost:3000')
    // 2.允许客户端使用哪些请求方法访问我
    res.header('Access-Control-Allow-Methods', 'get, post')
    //允许客户端发送跨域请求时携带cookie信息|
    res.header('Access-Control-Allow-Credentials', true);

    next();
});
 */

//设置允许跨域访问该服务
app.all('*', function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    // 2.允许客户端使用哪些请求方法访问我
    res.header('Access-Control-Allow-Methods', 'PUT,GET,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With');
    //这两步不能这么写,不然会形成覆盖,导致json类型的传参传递报错
    // res.header('Access-Control-Allow-Headers', 'Content-Type');
    // res.header('Access-Control-Allow-Headers', 'mytoken');
    res.header('Access-Control-Allow-Headers', ['mytoken', 'Content-Type']);
    next();
})


//路由
app.get('/data', (req, res) => {
//请把url的地址换成你需要请求数据的地址
    request({ url: 'http://*******************' }, function (error, response, body) {
        //    console.log(response)
        //把请求成功后的数据发送给客户端
        res.send(body);
    })
});

//监听端口
app.listen(3000);
//控制台提示输出
console.log('服务器启动成功');

使用这个方法的思路是利用node服务器做中间人,让node服务器帮我们去请求数据,在成功请求到数据以后发送给客户端。

2.编写客户端请求示例

写个简单的例子

$.ajax({
	    url: 'http://localhost:3000/data',
	    type: 'get',
	    success: function (data) {
			console.log(data);
	    }
	})

通过上面的ajax请求就可以拿到node服务器发给客户端的数据了。

总结

写博客记录自己在学习中遇到的问题以及解决方法我觉得这是很快乐的事情,以后回过头看看以前自己踩过的坑看着自己一点一点进步。
希望可以帮到大家,如果我写的地方有错误或者你们有更好的建议请留言或私信。我一会及时改正过来。谢谢大家。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值