一.Jsonp的作用?
Jsonp可以 跨域 读取数据
二.Jsonp的核心机制?
借助了 script标签 可以跨域异步请求数据的原理,请求一段js脚本,调用 回调函数
三.Jsonp能不能用post交互?
不能
四.注意事项
Jsonp必须得有 服务器接口
五.封装Jsonp
1.采用Json传参形式,解决位置置换问题
2.设置 响应超时 提示
3.从服务器接口获取数据
六.实例
1.调用搜索引擎接口( 百度 )
2.获取并展现数据(需要在 有网 的万前提下)
七.效果展示
1.百度搜索数据
2.实例数据展示
八.Jsonp代码和注释
//封装一个json转字符串函数
function json2url(json){
//创建一个空数组
var arr = [];
//遍历json的每个键值对
for(var key in json){
//把每个键值对转换成=的形式依次放入数组
arr.push(key+'='+json[key]);
};
//用&进行字符串拼接,并返回结果
return arr.join('&');
}
//封装一个jsonp函数
function jsonp(json){
//在没有传入json的情况下,默认设置为{}
json = json||{};
//判断是否传入url交互地址,如果没有,则终止运行
if(!json.url)return;
//设置响应时间,默认为15秒(后台为3秒)
json.timeout = json.timeout||15000;
//设置默认的接口(仅对于此处用到的url)
json.cbName = json.cbName||'cb';
//默认数据为一个空的json
json.data = json.data||{};
//设置jsonp的回调函数名并同时设置刷新缓存(利用随机数)
json.data[json.cbName] = 'show'+Math.random();
//把随机数里生成的.替换为空(函数命名不要有点)
json.data[json.cbName] = json.data[json.cbName].replace('.','');
//获取头部元素
var oHead = document.getElementsByTagName('head')[0];
//创新script(此处用到jsonp的核心机制,利用script的跨域异步请求,调用回调函数)
var oS = document.createElement('script');
//给script的src的地址赋值为交互地址
oS.src = json.url+'?'+json2url(json.data);
//把创建的script放入head中
oHead.appendChild(oS);
//设置一个定时器
var timer = setTimeout(function(){
//当响应时间超时后,使后续的函数不执行
window[json.data[json.cbName]] = null;
//并提示网络信息
json.error&&json.error('亲,网络不给力!');
},json.timeout);
//当数据正常响应时,执行以下操作
window[json.data[json.cbName]] = function(res){
//关闭定时器
clearTimeout(timer);
//清除之前插入的script(因为script只加载一次,并且此时已收到数据)
oHead.removeChild(oS);
//执行成功时设置的函数
json.success&&json.success(res);
};
}
九.HTML代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>jsonp封装</title>
<style>
</style>
<!-- 调用Jsonp函数 -->
<script src="jsonp.js"></script>
<script>
//当页面加载完毕
window.onload = function(){
//获取元素
var oWord = document.getElementById('word');
//当键盘抬起时
oWord.onkeyup = function(){
//提交接口,进行数据交互
jsonp({
//百度数据地址
"url":"https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
//数据接口
"data":{
"wd":this.value
},
//交互成功时
"success":function(res){
//弹出获取的数据
alert(res.s);
}
});
};
};
</script>
</head>
<body>
<input type="text" id="word">
</body>
</html>
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。