欢迎来到 跌倒的小黄瓜 的博客

♪(^∇^*)我要当大佬,(#^.^#)哈哈哈哈,(。-ω-)zzz我要成为优秀的人,(*^▽^*)٩(๑>◡<๑)۶O(∩_∩)O哈哈~~~~~~~~欢迎━(*`∀´*)ノ亻!

学习jsonp

jsonp

以前学过,当时就挺懵的,还全忘了,这次就当复习了一遍jsonp,😭

这里是解决客户端的跨域问题,服务端去解决跨域问题比这个简单只要加一个请求头就可以了

const express = require('express')

const app = express()

app.get('/', (req, res, next) => {
  console.log(`收到客户端请求了:${req.url}`)
  var data = JSON.stringify({
    foo: 'bar',
    list: [1, 2, 3]
  })
  setTimeout(function () {
    res.end(`${req.query.callback}(${data})`)
  }, 1000)
})

app.listen(3000, () => {
  console.log('running...')
})


<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>jsonp - 示例</title>
</head>
<body>
  <script>


    // 异步请求跨域限制(ajax)
    // 不同域名、不同协议、不同端口号
    
    jsonp({
      url: 'http://127.0.0.1:3000/',
      data: '',
      success: function (data) {
        console.log(111)
      }
    })

    jsonp({
      url: 'http://127.0.0.1:3000/',
      data: '',
      success: function (data) {
        console.log(222)
      }
    })

    jsonp({
      url: 'http://127.0.0.1:3000/',
      data: '',
      success: function (data) {
        console.log(333)
      }
    })

    function jsonp(option) {
      // 将用户通过对象命名空间传递进来的函数挂载到全局
      var callbackName = 'itcast_' + Math.random().toString().substr(2) + Math.random().toString().substr(2)
      !window.callbacks && (window.callbacks = {})
      window.callbacks[callbackName] = function (data) {
        option.success(data)
        // 这里才意味着可以删除 script 标签了
        // 这里可以直接使用 script ,原因是下面的变量提升,而且等这里使用 script 的时候,下面的代码早就执行结束了
        document.body.removeChild(script)
      }
      // 1. 解决 url 问题
      // 2. 解决回调处理函数问题
      option.url = option.url + '?callback=callbacks.' + callbackName
      var script = document.createElement('script')
      script.src = option.url
      // 将 script 上到 DOM 中
      document.body.appendChild(script)
    }
    

  </script>
</body>

</html>

posted @ 2020-01-24 15:33  跌倒的小黄瓜  阅读(205)  评论(0编辑  收藏  举报