zoukankan      html  css  js  c++  java
  • 跨域请求之jsonp的实现方式

    ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

     1 (function(){
     2             $jsonp(//地址
     3                     'http://api.douban.com/v2/movie/in_theaters',
     4                     //传递的参数
     5                     {
     6                         count:10,start:5
     7                     },
     8                     //回调函数
     9                     function(data){
    10                         document.getElementById('result').innerHTML=JSON.stringify(data);
    11                     }
    12             );
    13         })();
    14 
    15 
    16     (function(window,document){
    17     'use strict';
    18     var jsonp=function(url,data,callback){
    19         //1 挂载回调函数
    20         var fnSuffix=Math.random().toString().replace('.','');
    21         var cbFuncName='my_json_cb_'+fnSuffix;
    22         //将函数挂载在全局环境的方式不推荐  使用cbs.my_json_cb_
    23         window[cbFuncName]=callback;
    24         //2 将data转化成url字符串的形式
    25         // {id:1,name:'zhangsan'} =>id=1&name=zhangsan
    26         var querystring=url.indexOf('?')==-1?'?':'&';
    27         for(var key in data){
    28             querystring+=key+'='+data[key]+'&';
    29             //            id=          1   &
    30         }
    31         //querystring=?id=1&name=zhangsan&
    32         //3 处理url地址中的回调参数
    33         //url+=callback=sdfsfdg
    34         querystring+='callback='+cbFuncName;
    35         //querystring=?id=1&name=zhangsan&cb=my_json_cb_0231241
    36         //4 创建一个script的标签
    37         var scriptElement=document.createElement('script');
    38         scriptElement.src=url+querystring;
    39         // 此时还不能将其append到页面上
    40         //5 将script标签放到页面中
    41         document.body.appendChild(scriptElement);
    42         //append过后页面会自动对这个地址发送请求,请求完成以后自动执行脚本
    43 
    44     };
    45     /*把jsonp放到全局*/
    46     window.$jsonp=jsonp;
    47 })(window,document);

    缺点:只能支持GET请求而不能支持POST等其他http请求方式;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。

    优点:支持跨域,兼容性好。。。

  • 相关阅读:
    Jmeter安装与环境部署
    BVT & BAT (版本验证测试和版本验收测试)
    测试计划(Test Plan)
    小米8se从miui12降级刷机手记
    网络传输---HttpURLConnection
    mybatis 中 foreach collection的三种用法
    XStream--java对象与xml形式文件相互转换
    idea问题总结记录
    ssh框架配置过程
    ssm框架配置过程
  • 原文地址:https://www.cnblogs.com/layaling/p/9729552.html
Copyright © 2011-2022 走看看