script跨域请求前端

通过script标签实现跨域,个人自己笔记

后端返回的是个带实参的函数的调用'cb({"name":"erliuzi","age":22})',调用前端提前定义好的函数,用形参接收传过来的值 function cb (data){console.log(data)}
HTML
页面来个按钮

<button id="btn">点击请求数据</button>

JS

腾讯天气API:

请求地址:https://wis.qq.com/weather/common
请求方式GET 支持jsonp

参数

参数名必填类型参数
sourcestring'px''xw'
weather_typestring'forecast_1h' (未来7天)
'forecast_24h' (未来七天)
provincestring'江苏省' (省份)
citystring'南京市' (城市)
countystring'' (县)

weather_type 可用选项 'forecast_1h|forecast_24h|index|alarm|limit|tips'

调用发送跨域请求

const btn = document.getElementById('btn')

    btn.onclick = function () {

      jsonp({
      	// 天气预报
        url: 'https://wis.qq.com/weather/common',
        data: {
          source: 'pc',
          weather_type: 'forecast_1h',
         // weather_type: 'forecast_1h|forecast_24h|index|alarm|limit|tips',
          province: '江苏省',
          city: '南京市'
        },
        success: function (data) {
          console.log(data, 'data')
        }
      })
      
    }

封装的

 //封装jsonp跨域请求
    function jsonp(option) {

      let param = ''

      // 拼接data里参数
      for (const key in option.data) {
        param += '&' + key + '=' + option.data[key]
        console.log(param, 'param')
      }
      // 随机产生函数的名字来区别页面不同的跨域请求
      let fnName = 'callback' + Math.random().toString().replace('.', '')

      // 将随机产生的函数挂载到全局以便后端返回这个函数能够执行
      window[fnName] = option.success

      // 拼接完整的url请求
      let url = option.url + '?callback=' + fnName + param
      console.log(url, 'url')



      // 动态创建script标签
      let script = document.createElement('script')
      // 添加src
      script.src = url
      // 追加到页面
      document.body.appendChild(script)
      console.log(script)

      // script支持onload事件。在script标签完成请求后移除
      script.onload = function () {
        document.body.removeChild(script)
      }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值