服务端返回的是
flightHandler({
    "code": "CA1998",
    "price": 1780,
    "tickets": 5
});
我能看懂
{
    "code": "CA1998",
    "price": 1780,
    "tickets": 5
}是json,但在外面加了
flightHandler();表示什么意思,客户端为什么这样就能调用得到数据
var flightHandler = function(data){
        alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。');
    };jsonp

解决方案 »

  1.   

    不知道您有没有了解过“跨域”相关的话题。jsonp是为了解决跨域来的。
    所以要想明白为什么要这么写,你得先了解“跨域”,为什么要跨域,否则你会问,服务器直接给你返回
    {
        "code": "CA1998",
        "price": 1780,
        "tickets": 5
    }
    ,然后你var object = eval(serverString)不就结了?jsonp的做法就是在页面动态插入一个script标签,去加载服务器端的数据,因为script是天生可以跨域的。如果服务器直接给你返回
    {
        "code": "CA1998",
        "price": 1780,
        "tickets": 5
    },你是没有办法也没有机会处理它的。所以你传一个回调函数名flightHandler到服务器(这个函数在flightHandler你的页面上必须是已经定义了的),服务器把回调函数名连同数据拼接好之后给你返回来。当你的页面加载到该数据之火就执行了回调函数flightHandler。
    不知道你懂了没有。
      

  2.   

    不知道您有没有了解过“跨域”相关的话题。jsonp是为了解决跨域来的。
    所以要想明白为什么要这么写,你得先了解“跨域”,为什么要跨域,否则你会问,服务器直接给你返回
    {
        "code": "CA1998",
        "price": 1780,
        "tickets": 5
    }
    ,然后你var object = eval(serverString)不就结了?jsonp的做法就是在页面动态插入一个script标签,去加载服务器端的数据,因为script是天生可以跨域的。如果服务器直接给你返回
    {
        "code": "CA1998",
        "price": 1780,
        "tickets": 5
    },你是没有办法也没有机会处理它的。所以你传一个回调函数名flightHandler到服务器(这个函数在flightHandler你的页面上必须是已经定义了的),服务器把回调函数名连同数据拼接好之后给你返回来。当你的页面(也就是动态的<script>)收到该数据之就执行了回调函数flightHandler。
    不知道你懂了没有。 
      

  3.   


    还是不懂,为什么这样flightHandler({
        "code": "CA1998",
        "price": 1780,
        "tickets": 5
    });,就可以在调用方调用呢,这是js什么语法
      

  4.   

    jsonp用的就是script加载指定的url等同于
    <script>
    function abc(p){alert(p)}
    </script>
    <script src='xxx.js'></script>
    xxx.js
    abc(1111111111);
    只是xxx.js是动态加载进来的,而不是如示例那样写死了
      

  5.   

    我半天都白说了。
    flightHandler(flightInfo);你定义了flightHandler,然后你有一个航班信息对象,然后你发生了函数调用,这需要解释吗?
      

  6.   

    flightHandler({
         "code": "CA1998",
         "price": 1780,
         "tickets": 5
     });
    等同于以下代码var flightHandler=function(){
    // 你定义的处理方法
    }var obj=({
         "code": "CA1998",
         "price": 1780,
         "tickets": 5
     }
    flightHandler(obj);
      

  7.   

    抱歉以上的代码多了一个括号。应该是var flightHandler=function(){// 你定义的处理方法} var obj={     "code": "CA1998",     "price": 1780,     "tickets": 5 };
    flightHandler(obj);
      

  8.   

    我靠。。还是有问题.
    重新来var flightHandler=function(){
    // 你定义的处理方法
    }
    var obj={
         "code": "CA1998",
         "price": 1780,
         "tickets": 5
     }
    flightHandler(obj);
      

  9.   

    调用函数 flightHandler
    flightHandler 是你自己定义的。。
    PS: 这代码肯定不是你自己写的吧。  学新东西的时候  自己动手 很重要
      

  10.   


        var jsonp = {
          "code": "CA1998",
          "price": 1780,
          "tickets": 5
        };
        function flightHandler(data){
            return data;
        }
        alert(flightHandler(jsonp).price);
        //传入的jsonp如果换成字符串的话,就是:
        //flightHandler(eval('{"code": "CA1998","price": 1780,"tickets": 5}')).price
        //看懂了么?还不懂的话,再用jquery的ajax给你演示下,jquery ajax你应该弄过吧:
        $.ajax({
            url:'XXXXX.COM',
            dataType:'jsonp',
            data:null,
            success:function(data){
                 //这里的data就相当于你的:
                 //{"code": "CA1998","price": 1780,"tickets": 5}
                 //flightHandler(),就相当于:success:function(data)
            }
        })
      

  11.   

    靠,居然加的颜色背转意成字符串了。
       var jsonp = {
          "code": "CA1998",
          "price": 1780,
          "tickets": 5
        };
        function flightHandler(data){
            return data;
        }
        alert(flightHandler(jsonp).price);
        //传入的jsonp如果换成字符串的话,就是:
        //flightHandler(eval('{"code": "CA1998","price": 1780,"tickets": 5}')).price
        //看懂了么?还不懂的话,再用jquery的ajax给你演示下,jquery ajax你应该弄过吧:
        $.ajax({
            url:'XXXXX.COM',
            dataType:'jsonp',
            data:null,
            success:function(data){
                 //这里的data就相当于你的:
                 //{"code": "CA1998","price": 1780,"tickets": 5}
                 //flightHandler(),就相当于:success后边的function()
            }
        })
      

  12.   

    jsonp 是什么都没搞明白。
    本来就是就是个<script src='xxx.js'></script>。只不过人家把它封装了
      

  13.   

    jsonp的意思从字面的理解是json padding(json 填充)
    为什么那么写是因为它能够跨域,要是不需要跨域的话你自己ajax请求就好了对相应的把数据显示出来
    一说到跨域的话那么jsonp是一种交互方式
    比如我通过<script ></script> 请求一个数据 src不一定是.js结尾的
    但是返回的是一段js代码
    这段js带码是经过数据填充之后的,这个数据是后台得到的,因此相当于返回了数据,那么再调用就可以啦
    比如
    我在本地定义一个方法
    function aa(name){
     alert(name);
    }
    现在我通过script标签获取后台的数据,通过jsonp的方式
    那么后台返回js代码
    aa("姓名");
    这个姓名字符串就是后台获取的返回给前端,
    那么数据只要返回啦,那么就相当于在之前的script标签里面写了这么一句话
    <script>
    aa("姓名");
    </script>
    那么你的要求就达到了,但是为什么那么麻烦呢,一般的是因为要解决跨域问题,在不同域名下不能相互访问的比如baidu 访问taobao,不能直接交互,跨域通过jsonp交互