JSONP

  • 使用<script>元素做为Ajax传输的技术,称为JSONP

  • <script>元素能够做为一种Ajax传输机制,只需设置<script>元素的src属性(若没有插入到document,须要插入进去),而后浏览器就会发送一个http请求如下载src属性所指向的URL

  • 不受同源策略影响,可使用它们从其余服务器请求数据

  • 包含JSON编码数据的响应体会自动解码(执行)

  • 当经过<script>元素调用数据时,响应内容必须用javascript函数名和圆括号包裹起来。例如:

    handleResponse(    [1,2,{"buckld": "my shoe"}])复制代码
  • 为了告诉服务,它在被一个<script>元素调用,必须返回一个JSONP响应,能够经过在URL中添加 一个查询参数,例如,追加 “?json”


一个使用 script 元素发送 JSONP 的例子

  • script 加载后,响应内容会是一段由指定函数包裹的数据,例如,在本例中,将会是:'getJSONP.cb0({...}}‘

  • 将会执行函数getJSONP的cb0方法,并把data做为参数传入,从而执行callback方法

    function getJSONP (url, callback) {  let cbnum = 'cb' + getJSONP.counter++;  let cbname = 'getJSONP.' + cbnum;   if (url.indexOf('?') === -1) {    url += '?jsonp=' + cbname;  } else {    url += '&jsonp=' + cbname;  }   let script = document.createElement('script');   getJSONP[cbnum] = function (response) {    try {      callback(response)    }    finally {      delete getJSONP[cbnum]      script.parentNode.removeChild(script)    }  }   script.src = url;  document.body.appendChild(script);} getJSONP.counter = 0;复制代码
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息