Discuss / JavaScript / jsonp jsonpCallback原来就对应api里的 .....?callback = functionName

jsonp jsonpCallback原来就对应api里的 .....?callback = functionName

Topic source

SpringShaw

#1 Created at ... [Delete] [Delete and Lock User]

这两个参数 是设置加载 js文件里的调用函数.

 function getPrice() {
            var res = $.ajax("http://api.money.126.net/data/feed/0000001,1399001", {
                dataType: 'jsonp', // 期待返回数量类型为 jsonp 
                jsonp: 'callback', // 
                jsonpCallback: 'refreshPrice' // 回调函数名;
            });
        }
        //setting中三个参数一起组装起来了为:
         //http://api.money.126.net/data/feed/0000001,1399001?callback=refreshPrice
        // 所以 当 上面这个js加载进来后, 形式为: refreshPrice({.....});而函数的定义需要 自定义.
        function refreshPrice(data, status) {
            var text =
                data['0000001'].name + ":" + data['0000001'].price + "<br/>" +
                data['1399001'].name + ":" + data['1399001'].price;
            $("#current_price").slideUp('fast').html(text).slideDown('slow');
        }

但是, ajax()的返回对象类似于Promise,可以后接.done().fail()类定义回调函数. 所以如果后面接 .done() 就

不需要通过jsonpCallback:functionName 设置回调函数的名称.

**结论: ajax使用jsonp套路: **$.ajax("url", {dataType: 'jsonp'}).done(function(data, status)()).fail();

以下是参考文档:

`**jsonp **String

`

在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。

**jsonpCallback **String

为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。


  • 1

Reply