跨域

49 阅读1分钟

jsonp

  • 客户端写好一个执行函数,这个函数专门用来处理跨域获取服务器JSON格式的数据,由于script标签的特殊性,服务器回传回来的数据如果符合js语法的话浏览器就会执行,这个时候客户端会把需要提供的额外的参数加在URL的后面拼接一起发送到服务器端,服务器端接收这些参数执行相应的代码,然后把执行后的数据外包一个js函数再以JSON数据的形式返回给客户端或者浏览器,客户端或者浏览器收到后调用提前设置好的函数,执行函数获取数据。简称 JSON with padding --jsonp

  • 这就是说jsonp只支持get请求

cors

  • 在服务端的请求头加上:Access-Control-Allow-Origin:"*"

nginx 反向代理

fetch

  • fetch是一个普通的请求函数直接调用即可,不用实例化
  • fetch(url,{方法,请求体})返回的是一个promise对象,返回的response也是一个promise对象

1. 直接使用原生promise

let responses = await Promise.all([fetch(`${url}/1/`), fetch(`${url}/2/`), fetch(`${url}/4/`)]);
let values = await Promise.all(responses.map(r => r.json())); // 合并 map 和 Promise.all

2. 直接使用 await(推荐)

const fetchData = async () => {
    try {
        const response = await fetch('https://gorest.co.in/public/v1/users/1'); // 1. fetch 返回 Promise<Response>
        const data = await response.json(); // 2. 解析 JSON(也是一个 Promise)
        console.log(data); // 最终数据
    } catch (error) {
        console.error('Error:', error);
    }
};

3. 用 .then() 链式调用(不使用 async/await)

fetch('https://gorest.co.in/public/v1/users/1')
    .then(response => response.json()) // 解析 JSON
    .then(data => console.log(data))  // 获取最终数据
    .catch(error => console.error('Error:', error));