jsonp解决跨域问题

日常开发网页中,时常遇到跨域问题,通常解决办法:后端提供的接口支持jsonp格式,前端采用dataType:jsonp。

一:Jquery封装的AJAX,dataType:jsonp格式的方法:

 1 $.ajax({
 2     type : "get",
 3     async:false,
 4     url : "",
 5     dataType : "jsonp",
 6     jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
 7     jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,但是不能为空
 8     success : function(data){
10        console.log(data)     27     },
28     error:function(){
29        alert('fail');
30     }
31 })

 

二:使用原生js封装jsonp接口,同时应用Promise对象,可以链式调用

window.STATE_CALLBACK = {
  uid:new Date - 0
}
function jsonp(url,param,callbackName){
  return new Promise(function(resolve,reject){
    callbackName = callbackName || 'jsonpCallback'
    var script = document.createElement('script')
    script.setAttribute('async','async')
    var name = ['ymwangel',STATE_CALLBACK.uid++].join('')
    param[callbackName] = ['STATE_CALLBACK.',name].join('')
    script.src = paramConcatUrl(url,param)
    document.body.appendChild(script)
    STATE_CALLBACK[name] = function(data){
      delete STATE_CALLBACK[name]
      document.body.removeChild(script)
      resolve(data)
    }
    script.onerror = function(e){
      reject(e)
    }
  })
}

原生js封装jsonp的函数,更能体现jsonp实现跨域的原理:在页面中创建script标签,设置script的async、src属性,然后,将script标签插入到body中,最后当响应请求成功,获取到返回的数据后,删除之前插入的script标签即可。

转载于:https://www.cnblogs.com/ymwangel/p/8203012.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值