zoukankan      html  css  js  c++  java
  • jQuery 发送跨域请求(jsonp)

    一:跨域请求
    => 出发了同源策略的请求, 请求的时候
    => 发送方地址和接收方地址, 端口号 传输协议 域名 任意一个不一样
    二:常见的解决跨域的三种方案
    1. jsonp
    2. cors
    3. 代理
    三:原生 JS 解决
    1. script 标签的 src 属性来进行跨域
    => 后端返回的是一个字符串, 是一段可执行的 JS 代码
    => 一般后端返回的的都是 'xxx(后端给的数据)'
    => 前端准备好一个函数, 通过参数的形式吧函数名传递给后端
    2. cors
    => 有后端开启跨域资源共享
    => 告诉浏览器, 允许这个域名请求我的数据
    => 前端直接发送 ajax 请求
    3. 代理
    => 使用 nginx 服务器, 进行代理的配置
    => 前端发送请求的时候, 请求代理标识符
    => 会由 nginx 服务器帮我们转发请求到数据服务器
    四:jQuery 解决跨域
    1. jsonp
    => jQuery 把动态创建 script 标签
    => 动态把 script 标签插入到页面
    => 使用完毕在删除
    => 这个事情封装起来了
    => 这个函数叫做 $.ajax()
    【注】 $.ajax() 方法发送一个 jsonp 请求
    => 必须把 dataType 属性写成 jsonp
    => 他就会发送一个 jsonp 的请求
    => jQuery 发送 jsonp 请求默认是不缓存
    -> cache 默认是 false
    => 还有两个专属于 jsonp 请求的配置项
    -> jsonp: 配置传递函数名的时候的 key
    -> jsonpcallback: 配置一个自己准备好的函数名
    2. cors
    => 只要后台开启了跨域资源共享
    => 我们直接请求
    3. 代理
    => 我们还是照常配置代理
    => 依旧使用 $.ajax() 或者 $.get() 或者 $.post() 方法发送请求
    => 只是 url 位置写成代理标识符就可以了
    $.ajax({ url: 'http://127.0.0.1:80/nz/day33/server/jsonp.php', dataType: 'jsonp', jsonp: 'cb', // 传递参数的时候, 我的 cb 这一项是表示我的准备好的函数名 jsonpCallback: 'fn' }).then(res => { console.log(res) })
    function fn(res) { console.log('我被调用了') console.log(res) }

  • 相关阅读:
    10.矩形覆盖 Java
    09.变态跳台阶 Java
    08.青蛙跳台阶 Java
    07.斐波那契数列 Java
    06.旋转数组的最小数字 Java
    05.用两个栈实现队列 Java
    04.重建二叉树 (Java)
    03.从尾到头打印链表 (Java)
    数据结构-有序链表的合并
    数据结构-判断链表是否存在环形链表
  • 原文地址:https://www.cnblogs.com/msx-hanquan/p/13225657.html
Copyright © 2011-2022 走看看