当前位置: 首页 > article >正文

JSONP处理跨域请求

JSONP

背景

由于浏览器存在安全策略,所以当访问的请求中的协议、域名、端口其中一个与本站不同时就会形成跨域,这里介绍一种比较简单的方案——jsonp。

原理

浏览器对 script、img这些带有src属性的的标签在发送请求时是不会触发跨域的校验,所以可以通过script 发送一个请求,并在这个请求url中带上前端本地的回调函数名,由后端返回的脚本中执行该方法,并把数据传到该方法中。

function ajaxJsonp(url, params) {
  return new Promise((resolve, reject) => {
    // 创建一个唯一的回调函数名
    const callbackName = `jsonpCallback${Math.random().toString(36).substr(2, 9)}`;

    // 构建请求 URL
    params = params || {};
    params.callback = callbackName;
    const queryString = new URLSearchParams(params).toString();
    const fullUrl = `${url.indexOf("?") !== -1 ? url + "&" + queryString : url + "?" + queryString}`;
    // const handelUrl = handleUrlByGet(params, fullUrl);

    // 创建 <script> 标签并设置 src 属性
    const script = document.createElement("script");
    script.src = fullUrl;

    // 定义全局回调函数
    window[callbackName] = (data) => {
      resolve(data);
      document.head.removeChild(script);
      delete window[callbackName];
    };

    // 监听脚本加载错误
    script.onerror = () => {
      reject(new Error("JSONP request failed"));
      document.head.removeChild(script);
    };

    // 将 <script> 标签添加到文档中
    document.head.appendChild(script);
  });

http://www.kler.cn/a/401778.html

相关文章:

  • SpringBoot登录功能实现思路(验证码+拦截器+jwt)
  • 小米路由器用外网域名访问管理界面
  • 环形缓冲区 之 STM32 串口接收的实现
  • ADS 2022软件下载与安装教程
  • Vue3 pinia使用
  • 面向服务的软件工程——业务流程合规性(Business Process Compliance)(week12)
  • 每日一练:【动态规划算法】斐波那契数列模型之第 N 个泰波那契数(easy)
  • 【白话机器学习系列】白话 Softmax
  • 自动驾驶系统研发系列—智能驾驶新高度:解析ESS驾驶员转向辅助系统
  • C++ STL中常见的容器
  • 面向FWA市场!移远通信高性能5G-A模组RG650V-NA通过北美两大重要运营商认证
  • CSS基础选择器与div布局
  • 社群在 2+1 链动模式 S2B2C 商城小程序社交新零售运营中的价值与应用
  • 【Go实战】:使用AES和RSA加密算法保护关键信息
  • 独立资源池:虚拟化技术如何帮助企业在经济危机中降低成本?
  • 我们来学mysql -- EXPLAIN之type(原理篇)
  • Swift 数组
  • 安装 Ubuntu 桌面系统
  • [论文阅读] 异常检测 Deep Learning for Anomaly Detection: A Review(三)总结梳理-疑点记录
  • iOS 键盘弹出视图精准上移
  • 深度解析FastDFS:构建高效分布式文件存储的实战指南(下)
  • qiankun主应用(vue2+element-ui)子应用(vue3+element-plus)不同版本element框架css样式相互影响的问题
  • Linux驱动开发快速入门——字符设备驱动(直接操作寄存器设备树版)
  • MySQL系统优化
  • 芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)
  • css iframe标签使用