异步ajax jsonp,为什么说Jsonp不是Ajax的特例

我们通常在网页里用ajax做异步请求通信的时候,会发现一个问题,我们要请求的文件和当前网页并不在同一个域名下,这就出现的ajax的跨域问题。查了很多资料,其实ajax在设计之初为了保证数据通讯安全,是不允许跨域请求json类型的数据的。那么怎么来解决这个问题呢?

聪明的人类想到了通过事先在服务器端程序约定的一个callback(回调函数),在客户端请求的时候往这个回调函数里传入一个参数,假定叫做abc,然后对方将用这个abc作为名称,包住需要响应的json文件,形如abc(...),这里...是指json数据类型的数据,这样服务器返回的是一个用abc套子包住的json数据,伪装成javascript文件的模样返回到客户端。

客户端拿到这个javascript文件后打开一看,我擦,直接是带json参数的的abc函数的调用,直接运行客户端之前已经在html中写好的abc(data)函数,进行前端的渲染。

至此,终于解决了跨域问题,这就是jsonp技术的妙处,理论上用这种方式同样能解决同一域名下的请求噢。或许以后把他们封装起来,更好用呢。所以说jsonp技术不仅仅是ajax的一个特例,反而是ajax的一种高级形式呢。

AAffA0nNPuCLAAAAAElFTkSuQmCC

不知道同学们有没有看懂呢?,呵呵,第一次写笔记,日后定当斧正!

附上案例代码,这是一个从本地跨域异步请求天气预报api服务的案例噢。界面太丑了~

获取第三方天气数据

#div1{

position:relative;

left: 50%;

background: lightGreen;

width: 300px;

height: 500px;

overflow-y: scroll;

overflow-x: hidden;

margin-left: -150px;

padding-bottom: 20px;

}

#div1 select{

margin-left : 80px;

margin-top : 10px;

height: 30px;

}

#div1 input{

height: 30px;

}

#div1 div{

width: 300px;

background: lightBlue;

border-bottom: red solid 1px;

}

#div1 div ul li{

list-style-type: none;

padding-left: 10px;

}

function abc(data){

var d = data.weather;

var info = document.getElementById('info');

info.innerHTML = '';

for(var i=0;i

var date = d[i].date;

var day = d[i].info.day;

var night = d[i].info.night;

var tag = '';

tag += '日期:'+date+'

  • ';

tag += '

白天天气:'+day[1]+'';

tag += '

白天温度:'+day[2]+'';

tag += '

白天风向:'+day[3]+'';

tag += '

白天风速:'+day[4]+'';

tag += '';

tag += '

  • ';

tag += '

夜间天气:'+night[1]+'';

tag += '

夜间温度:'+night[2]+'';

tag += '

夜间风向:'+night[3]+'';

tag += '

夜间风速:'+night[4]+'';

tag += '

';

var div = document.createElement('div');

div.innerHTML = tag;

info.appendChild(div);

}

}

window.onload = function(){

var city = document.getElementById('city');

city.onchange = function(){

document.getElementById('info').innerHTML = '';

}

var btn = document.getElementById('btn');

btn.onclick = function(){

var cityCode = city.value;

var url = 'http://cdn.weather.hao.360.cn/api_weather_info.php?app=hao360&_jsonp=abc&code='+city.value;

var script = document.createElement('script');

script.src = url;

document.body.appendChild(script);

}

}

北京

上海

广州

深圳

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值