心知天气jsonp调用方式,可以防止跨域,纯前端调用,输出promise

用promise封装调用jsonp效果,可以按效果自己再封装一遍

   import CryptoJS from 'crypto-js'  //注册crypto-js,看你自己怎么调用了
    getWeather() {
      const jsonp = function(url, callbackFunctionName = 'callbackFunctionName') {
        return new Promise((resolve, reject) => {
          // 定义回调函数
          window[callbackFunctionName] = (response) => {
            // 处理响应数据
            resolve(response)

            // 清理:删除 script 标签和全局的回调函数
            document.body.removeChild(script)
            delete window[callbackFunctionName]
          }

          // 创建 script 标签
          const script = document.createElement('script')
          script.src = `${url}&callback=${callbackFunctionName}`
          script.onerror = () => reject('JSONP 请求失败')

          // 将 script 标签添加到文档中,通常添加到 body 而不是 head
          document.body.appendChild(script)
        })
      }
      const getUrl = function() {
        const time = Math.round(new Date().getTime() / 1000)
        const str = 'ts=' + time + '&ttl=30&uid=***' // 公钥
        const hash = CryptoJS.HmacSHA1(str, '***') // 私钥
        const base = hash.toString(CryptoJS.enc.Base64)
        const sig = encodeURIComponent(base)
        const url = 'https://api.seniverse.com/v3/weather/now.json?location=beijing&' + str + '&sig=' + sig // location 区域/也可以用ip
        return url
      }
      const url = getUrl()
      return jsonp(url)
    }

最后调用

this.getWeather().then(res => {
	console.log(res)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值