可以有人解释一下jsonp和jsonpCallback的区别嘛?

jsonp和jsonpcallback的在网上看了各种各样的定义,只感觉越来越😵
1.回调参数指的是jsonp还是jsonpCallback?
2.jsonp到底是回调函数名还是回调函数参数名?
请赐教,不胜感激。

回复
阅读 2.6k
2 个回答

假设有接口 https://xxx.com/ip?callback=cb
返回内容

cb('127.0.0.1')

假设使用代码

$.ajax({
  url:'https://xxx.com/ip',
  dataType: 'jsonp',
+  jsonp: 'rest',
+  jsonpCallback:'hhh1',
  success:console.log,
  error:console.log,
})

将请求 URL https://xxx.com/ip?rest=hhh1&_=1635513210866

$.ajax({
  url:'https://xxx.com/ip',
  dataType: 'jsonp',
-  jsonp: 'rest',
  jsonpCallback:'hhh1',
  success:console.log,
  error:console.log,
})

将构建 URL https://xxx.com/ip?callback=hhh1&_=1635513210867

$.ajax({
  url:'https://xxx.com/ip',
  dataType: 'jsonp',
-  jsonp: 'rest',
-  jsonpCallback:'hhh1',
  success:console.log,
  error:console.log,
})

将构建 URL https://xxx.com/ip?callback=jQuery111309387894838174882_1635513210863&_=1635513210868

看出规律了吗?

jsonp 参数表示 callback 的名字,jsonpCallback 则表示callback 的值,即 jsonp 要调用的函数

最后的 _ 参数,是用来避免缓存用的。

因为服务端需要两个信息来确定返回的函数名:

  1. 函数名是哪一个参数?

    比如 ?邻居=老王&老婆=英子&警察=编号847这个语句里,后端知道“警察”才是用来放函数名的。
    但是 jQuery默认callback是用来放函数名的,自作主张地把参数拼成 ?邻居=老王&老婆=英子&callback=编号847
    然后服务端找不到“警察”,请求失败。
    这时候设置 jsonp: "警察"jQuery就能拼成正确的 URL 了。

    用来放函数名的那一个参数名,比如“警察”(等号前那一个,而不是后面一个),就是 jsonp!

  2. 函数名是什么?

    这就是警察的编号了,jQuery可能自作主张编一个后缀,比如jQuery129478435,也就是...警察=jQuery129478435
    通常这是不影响使用的,但是你想把它语义化一点,你就自己给警察编号,这样 jQuery就不再自作主张,而是按你的想法来,URL 形式最终变成 ?邻居=老王&老婆=英子&警察=编号847

    函数名,比如“警察847”就是 jsonpcallback!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏