美文网首页
json与jsonp

json与jsonp

作者: 别让我一个人醉_1fa7 | 来源:发表于2017-09-05 11:14 被阅读0次

    什么是JSON

         JSON是一种基于文本的数据交换方式,或者叫做数据描述格式
    

    JSON的优点:

    1、基于纯文本,跨平台传递极其简单;

    2、Javascript原生支持,后台语言几乎全部支持;

    3、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

    4、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;

    5、容易编写和解析,当然前提是你要知道数据结构;

    JSON的格式/规则:

    JSON能够以非常简单的方式来描述数据结构,XML能做的它都能做,因此在跨平台方面两者完全不分伯仲。

    1、JSON只有两种数据类型描述符,大括号{}和方括号[],其余英文冒号:是映射符,英文逗号,是分隔符,英文双引号""是定义符。

    2、大括号{}用来描述一组“不同类型的无序键值对集合”(每个键值对可以理解为OOP的属性描述),方括号[]用来描述一组“相同类型的有序数据集合”(可对应OOP的数组)。

    3、上述两种集合中若有多个子项,则通过英文逗号,进行分隔。

    4、键值对以英文冒号:进行分隔,键名都加上英文双引号”",以便于不同语言的解析。

    5、JSON内部常用数据类型有 字符串、数字、布尔、日期、null ,字符串必须用双引号引起来,其余的都不用,日期类型比较特殊,如果客户端没有按日期排序功能需求的话,那么可以把日期时间直接作为字符串传递
    JSON实例:

    //描述一个人
    
    var person={"Name": "Bob","Age": 32,"Company": "IBM","Engineer":true}
    
    //获取这个人的信息var personAge=person.Age;
    
    //描述几个人
    
    var members=[
    
    {"Name": "Bob","Age": 32,"Company": "IBM","Engineer":true},
    
    {"Name": "John","Age": 20,"Company": "Oracle","Engineer":false},
    
    {"Name": "Henry","Age": 45,"Company": "Microsoft","Engineer":false}
    
    ]
    
    //读取其中John的公司名称
    
    var johnsCompany= members[1].Company;
    
    //描述一次会议
    
    var conference=
    
    {"Conference": "Future Marketing","Date": "2012-6-1","Address": "Beijing","Members":
    
    [
    
    {"Name": "Bob","Age": 32,"Company": "IBM","Engineer":true},
    
    {"Name": "John","Age": 20,"Company": "Oracle","Engineer":false},
    
    {"Name": "Henry","Age": 45,"Company": "Microsoft","Engineer":false}
    
    ]
    
    }
    

    jsonp

    1、Ajax直接请求普通文件存在跨域无权限访问的问题

    2、Web页面上调用js文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标签都拥有跨域的能力JSON的纯字符数据格式可以简洁的描述复杂数据,JSON还被js原生支持,为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

    JSONP的客户端具体实现:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript">
        // 得到信息查询结果后的回调函数
        var flightHandler = function(data){
            alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。');
        };
        // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
        var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler";
        // 创建script标签,设置其属性
        var script = document.createElement('script');
        script.setAttribute('src', url);
        // 把script标签加入head,此时调用开始
        document.getElementsByTagName('head')[0].appendChild(script);
        </script>
    </head>
    <body>
     
    </body>
    </html>
    

    jQuery中的jsonp

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml" >
     <head>
         <title>Untitled Page</title>
          <script type="text/javascript" src=jquery.min.js"></script>
          <script type="text/javascript">
         jQuery(document).ready(function(){
            $.ajax({
                 type: "get",
                 async: false,
                 url: "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998",
                 dataType: "jsonp",
                 jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
                 jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
                 success: function(json){
                     alert('您查询到航班信息:票价: ' + json.price + ' 元,余票: ' + json.tickets + ' 张。');
                 },
                 error: function(){
                     alert('fail');
                 }
             });
         });
         </script>
         </head>
      <body>
      </body>
     </html>
    

    相关文章

      网友评论

          本文标题:json与jsonp

          本文链接:https://www.haomeiwen.com/subject/tkrujxtx.html