美文网首页让前端飞
使用 jsonp 解决跨域请求百度地图 api 问题

使用 jsonp 解决跨域请求百度地图 api 问题

作者: 贵在随心 | 来源:发表于2019-02-26 17:22 被阅读2次

Jsonp 原理:动态生成一个JavaScript标签,其src由接口url、请求参数、callback函数名拼接而成,利用js标签没有跨域限制的特性实现跨域请求。
代码实现:

const jsonp = function (url, data) {
      return new Promise((resolve, reject) => {
        // 初始化url
        let dataString = url.indexOf('?') === -1 ? '?' : '&'
        let callbackName = `jsonpCB_${Date.now()}`
        url += `${dataString}callback=${callbackName}`
        if (data) {
         // 有请求参数,依次添加到url
          for (let k in data) {
            url += `&${k}=${data[k]}`
          }
        }
        let jsNode = document.createElement('script')
        jsNode.src = url
        // 触发callback,触发后删除js标签和绑定在window上的callback
        window[callbackName] = result => {
          delete window[callbackName]
          document.body.removeChild(jsNode)
          if (result) {
            resolve(result)
          } else {
            reject('没有返回数据')
          }
        }
        // js加载异常的情况
        jsNode.addEventListener('error', () => {
          delete window[callbackName]
          document.body.removeChild(jsNode)
          reject('JavaScript资源加载失败')
        }, false)
        // 添加js节点到document上时,开始请求
        document.body.appendChild(jsNode)
      })
    }
    jsonp(url, data)
      .then(result => { console.log(result) })
      .catch(err => { console.error(err) })

代码讲解:
1.callback函数要绑定在window对象上
2.服务端返回数据有特定格式要求:callback函数名+'('+JSON.stringify(返回数据) +')'
3.不支持post,因为js标签本身就是一个get请求

相关文章

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • 跨域

    ??JSONP只能解决GET请求跨域,不能解决POST请求跨域问题,XHR2可以解决GET,POST方式的请求跨域...

  • 跨域上传图片并预览

    跨域上传文件 之前解决跨域问题都是使用的JQuery的JSONP类型的Ajax请求,JSONP原理是让服务器把数据...

  • 使用 jsonp 解决跨域请求百度地图 api 问题

    Jsonp 原理:动态生成一个JavaScript标签,其src由接口url、请求参数、callback函数名拼接...

  • ajax跨域请求问题的五种解决方案

    ajax跨域请求问题的五种解决方案 方案一: 使用跨域资源共享代理(corsproxy) 方案二: 使用jsonp...

  • 前端跨域请求实现(待整理)

    1.常用的vue的axios实现请求 2.传统项目使用jsonp解决跨域请求和接受问题

  • jsonp

    用途 主要用来解决api使用的跨域问题JSONP(JSON with Padding)是JSON的一种“使用模式”...

  • 解决ajax跨域问题

    Jsonp解决ajax跨域问题 CORS解决ajax跨域问题

  • 复习jsonp和promise

    一.jsonp 1.jsonp是跨域访问api,ajax不能跨域 2.在vue中使用jsonp首先要安装jsonp...

  • Ajax请求跨域问题

    遇到ajax请求跨域问题,解决方式,改dataType为jsonp json和jsonp返回数据格式json格式 ...

网友评论

    本文标题:使用 jsonp 解决跨域请求百度地图 api 问题

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