ajax的跨域处理之JSONP
2017-05-22 14:05
330 查看
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于
server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML
的<script>元素是一个例外。利用 <script>
元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON
资料,而这种使用模式就是所谓的 JSONP.
步骤:
1,在document中动态创建<script>
2,给<script>
的属性src添加url(你的资源访问路径)
3,在url中添加calback|cb(回调函数)
4,写回调函数(处理数据你接收的数据).
百度搜索Demo:
Html:
<body>
<input
type="text"
/>
<ul>
<li><a
href="###">fsaef</a></li>
</ul>
</body>
Css:
<style>
*{
margin:0;
padding:0;
}
body{
padding:100px;
}
ul{
width:150px;
background-color:#EEEEEE;
display:none;
}
ulli{
list-style:none;
}
ullia{
display:block;
width:150px;
height:30px;
line-height:30px;
}
ullia:hover{
background-color:#AAA;
color: skyblue;
}
</style>
JS:
<script
type="text/javascript">
var oInput=document.querySelector('input');
var
oUl=document.querySelector('ul');
var
aUlLis=document.querySelector('ul
li');
var
oHead=document.getElementById('head');
oInput.onkeyup=function(){
var aOldScript=document.getElementsByClassName('num1');
if(aOldScript.length>=1){
oHead.removeChild(aOldScript[0]);//删除动态生成的旧的<script>
}
var oScript=document.createElement('script');//创建<script>节点
oScript.src='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+oInput.value+'&cb=fn'//给oScript添加资源路径和回调函数
oScript.className="num1";
oHead.appendChild(oScript);//在文档尾端添加节点
oUl.style.display='block';
}
function fn(data){//编写回调函数(处理返回的数据)
var arr=data.s;
var str='';
for(var
i=0;i<arr.length;i++){
str+='<li><a href="###">'+arr[i]+'</a></li>';
oUl.innerHTML=str;
var aUlLias=document.querySelectorAll('ul
li a');
for(var
i=0;i<aUlLias.length;i++){
(function(i){
aUlLias[i].onclick=function(){
oInput.value=this.innerText;
oUl.style.display='none';
window.open('https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=0&rsv_idx=1&tn=baidu&wd='+this.innerText);
}
})(i);
}
}
}
</script>
server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML
的<script>元素是一个例外。利用 <script>
元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON
资料,而这种使用模式就是所谓的 JSONP.
步骤:
1,在document中动态创建<script>
2,给<script>
的属性src添加url(你的资源访问路径)
3,在url中添加calback|cb(回调函数)
4,写回调函数(处理数据你接收的数据).
百度搜索Demo:
Html:
<body>
<input
type="text"
/>
<ul>
<li><a
href="###">fsaef</a></li>
</ul>
</body>
Css:
<style>
*{
margin:0;
padding:0;
}
body{
padding:100px;
}
ul{
width:150px;
background-color:#EEEEEE;
display:none;
}
ulli{
list-style:none;
}
ullia{
display:block;
width:150px;
height:30px;
line-height:30px;
}
ullia:hover{
background-color:#AAA;
color: skyblue;
}
</style>
JS:
<script
type="text/javascript">
var oInput=document.querySelector('input');
var
oUl=document.querySelector('ul');
var
aUlLis=document.querySelector('ul
li');
var
oHead=document.getElementById('head');
oInput.onkeyup=function(){
var aOldScript=document.getElementsByClassName('num1');
if(aOldScript.length>=1){
oHead.removeChild(aOldScript[0]);//删除动态生成的旧的<script>
}
var oScript=document.createElement('script');//创建<script>节点
oScript.src='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+oInput.value+'&cb=fn'//给oScript添加资源路径和回调函数
oScript.className="num1";
oHead.appendChild(oScript);//在文档尾端添加节点
oUl.style.display='block';
}
function fn(data){//编写回调函数(处理返回的数据)
var arr=data.s;
var str='';
for(var
i=0;i<arr.length;i++){
str+='<li><a href="###">'+arr[i]+'</a></li>';
oUl.innerHTML=str;
var aUlLias=document.querySelectorAll('ul
li a');
for(var
i=0;i<aUlLias.length;i++){
(function(i){
aUlLias[i].onclick=function(){
oInput.value=this.innerText;
oUl.style.display='none';
window.open('https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=0&rsv_idx=1&tn=baidu&wd='+this.innerText);
}
})(i);
}
}
}
</script>
相关文章推荐
- ajax 跨域 jsonp 处理
- jquery中的ajax处理跨域问题-之-----jsonp
- ajax jsonp跨域处理问题
- jquery 源码分析8-ajax(D)JSONP跨域处理
- java 处理跨域问题(ajax使用jsonp)
- jquery处理ajax跨域问题方法(三)--jsonp详解(转)
- ajax 跨域处理 jsonp
- AJAX 跨域请求 - JSONP获取JSON数据
- 跨域请求之jQuery的ajax jsonp的使用解惑
- 跨域请求之jQuery的ajax jsonp的使用解惑
- Jquery版Ajax利用JSONP 跨域POST/GET传输数据研究
- 利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据
- ajax跨域之JSONP
- AJAX的跨域与JSONP(为文章自动添加短址的功能)
- (转)AJAX 跨域请求 - JSONP获取JSON数据
- AJAX 跨域请求 - JSONP获取JSON数据
- AJAX 跨域请求 - JSONP获取JSON数据
- 利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据
- 关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例
- AJAX的跨域与JSONP(为文章自动添加短址的功能)