ajax的跨域处理之JSONP

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>




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值