美文网首页
JSONP原理及实现

JSONP原理及实现

作者: 前端咸蛋黄 | 来源:发表于2019-04-22 20:36 被阅读0次

一、JSONP

JSONP全称 JSON with Padding,用于解决跨域问题的一种方案。
由于同源策略的限制,浏览器只允许XmlHttpRequest请求当前源(域名、协议、端口)的资源,而对请求script资源没有限制。JSONP通过请求script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,这种跨域的数据的方式被称为JSONP。

二、前端部分

请求方创建 script,src 指向响应方,同时传一个
查询参数?callbackName=yyy

button.addEventListener('click',(e) =>{
    // 创建一个动态标签
    let script = document.createElement('script');
    // src指向响应方,同时传一个查询参数
    script.src = 'www.pay.com?callback=money'
    // 添加到body里
    document.body.appendChild(script)
    // 加载成功后,删除标签
    script.onload = function(e){
      e.currentTarget.remove()
    }
    //失败后也删除
    script.onerror = function(e){
      e.currentTarget.remove()
    }
  })

三、后端部分

响应方根据查询参数callbackName,构造形如yyy('你要的数据')这样的响应。浏览器接收到响应,就会执行 yyy.call(undefined, '你要的数据'),那么请求方就知道了他要的数据。

if (path === '/pay'){
    let amount = fs.readFileSync('./db', 'utf8')
    fs.writeFileSync('./db', amount)
    let callback = query.callback
    response.setHeader('Content-Type', 'application/javascript')
    response.write(`
        ${callback}.call(undefined, 'success')
    `)
    response.end()
}

相关文章

  • JSONP原理及实现

    基本原理 基本原理: 主要就是利用了 script 标签的src没有跨域限制来完成的。 执行过程 执行过程: 前端...

  • JSONP原理及实现

    一、JSONP JSONP全称 JSON with Padding,用于解决跨域问题的一种方案。由于同源策略的限制...

  • JSONP原理及简单实现

    JSONP是实现跨域通信的解决方案 比如 callback定义一个函数名称,而远程服务端通过调用指定的函数并传入参...

  • JSONP技术原理及实现

    转自《跨域jsonp的原理》 首先确定为什么要用jsonp,因为要跨域请求数据,那为什么会发生跨域呢,因为浏览器的...

  • day02-vuejs-vue-resource实现get, p

    vue-resource实现get, post, jsonp]请求: JSONP的实现原理: 由于浏览器的安全性限...

  • 遇到的面试题

    null instanceOf Object false jsonp跨域原理,优缺点,安全性因素 jsonp的实现...

  • 跨域方案

    JSONP JSON with padding 简称JSONP ,实现原理 通过动态 元素,指定src属性为一个跨...

  • JSONP的历史方案和实现原理

    1. JSONP的实现原理 JSONP是通过动态创建script实现的。请求方:frank.com 的前端程序员(...

  • 跨域

    解决跨域方法:jsonp,代理,cors jsonp实现原理:动态创建script标签 ,因为script中的sr...

  • JSONP实现原理

    JSONP:JSON With Padding 含义:可以理解为请求后端API,服务器会在传给浏览器前将JSON数...

网友评论

      本文标题:JSONP原理及实现

      本文链接:https://www.haomeiwen.com/subject/tnwugqtx.html