jsonpCallback: xx is not a function
参考文献:
https://www.cnblogs.com/lenghan/p/5777588.html
根据原理解读,发现同一个页面如果多个ajax请求调用的jsonpCallback名字相同的话,会在执行完第一个jsonpCallback后,就会置为undefined
function setCoupons22222222222(){ $.ajax({ type: 'GET', url: "https://api.pangku.com/v1/coupons/channel?count=1&serialId=2824&brandId=2®ionId=1&ad_num=03", dataType:'jsonp', cache: true, jsonpCallback: 'setCouponsChannel', success:function(resultData){ console.log("哈哈"); console.log(resultData); }, error:function(data){ console.log(1234); } }); } setCoupons22222222222(); setCoupons22222222222();
暂时发现有两种解决方法:
第一种,设置不同的jsonpCallback名称,比如在for循环里调用的时候,每个名字加上循环的i来区分(实际上缓存就失效了?)
function setCoupons22222222222(i){ $.ajax({ type: 'GET', url: "https://api.pangku.com/v1/coupons/channel?count=1&serialId=2824&brandId=2®ionId=1&ad_num=03", dataType:'jsonp', cache: true, jsonpCallback: 'couponsChannel'+i, success:function(resultData){ console.log("哈哈"); console.log(resultData); }, error:function(data){ console.log(1234); } }); } setCoupons22222222222(1); setCoupons22222222222(2); setCoupons22222222222(3); setCoupons22222222222(4); setCoupons22222222222(5); setCoupons22222222222(6);
优化一下,让网站缓存继续可用:
var a=1; function setCoupons22222222222(){ a=a+1 $.ajax({ type: 'GET', url: "https://api.pangku.com/v1/coupons/channel?count=1&serialId=2824&brandId=2®ionId=1&ad_num=03", dataType:'jsonp', cache: true, jsonpCallback: 'couponsChannel'+a, success:function(resultData){ console.log("哈哈"); console.log(resultData); }, error:function(data){ console.log(1234); } }); } setCoupons22222222222(); setCoupons22222222222(); setCoupons22222222222(); setCoupons22222222222(); setCoupons22222222222(); setCoupons22222222222();
第二种,定义jsonpCallback函数,但是不做处理,例如:
function setCoupons22222222222(){ $.ajax({ type: 'GET', url: "https://api.pangku.com/v1/coupons/channel?count=1&serialId=2824&brandId=2®ionId=1&ad_num=03", dataType:'jsonp', cache: true, jsonpCallback: 'setCouponsChannel', success:function(resultData){ console.log("哈哈"); console.log(resultData); }, error:function(data){ console.log(1234); } }); } function setCouponsChannel(data){console.log("hello")}; setCoupons22222222222(); setCoupons22222222222();
你会发现先打印hello再打印上面的哈哈,就是说ajax返回后先调用jsonpCallback处理返回的数据,再将返回的数据传给success进行处理
----------------------------------------------------我是分割线--------------------------------------------------------------
另外一种情况是,在你发现ajax的时候,别人把你ajax注册到window对象的jsonpCallback函数置为undefined了
例如:
function setCoupons22222222222(){ $.ajax({ type: 'GET', url: "https://api.pangku.com/v1/coupons/channel?count=1&serialId=2824&brandId=2®ionId=1&ad_num=03", dataType:'jsonp', cache: true, jsonpCallback: 'setCouponsChannel', success:function(resultData){ console.log(resultData); }, error:function(data){ console.log(1234); } }); window.setCouponsChannel=null; } setCoupons22222222222();
jsonpCallback: xx is not a function的更多相关文章
- 关于IONIC 报错 XX is not a function
刚开始 做一个项目,总是报错"XX is not a function" 最后发现 原因 , 原来是 服务的 注入位置 有问题. angular.module(" ...
- 学习angularjs时遇到 XX is not a function
第一次练习就直接没效果: "后不能直接以 function XXXcontroller (){ code......}这样的方式直接注册监听器了. 以后必须angular.mod ...
- jquery插件一直报错:xx is not a function
当然像js文件未引用或者js插件使用方法不对这样的解决办法想必大家都已经试过了. 那么在放弃前请最后看一下是不是引用了两个jquery文件. 引用了两个jquery文件! 引用了两个jquery文件! ...
- var 与function的权重浅析
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 15分XX秒后订单自动关闭(倒计时)
//订单记录 function get_order(){ //请求订单ajax方法 XX.send_api("method",{data},function(){ var date ...
- 跨域名设置cookie或获取cookie
可以使用jquery里面的ajax中的jsonp的方式来访问就可以了.代码如下: $.ajax({ url: 'your url', data: {'xx' : 'xx', 'xx2' : 'xx2' ...
- iOS之UIWebView无法获取web标题
最近遇到了一个问题,就是在UIWebView的代理方法里,执行document.title的js代码无法获取网页标题,代码如下: - (void)webViewDidFinishLoad:(UIWeb ...
- :jQuery实例【DEMO】
前言: 今天2月最后一天,写一篇jQuery的几个实例,算是之前前端知识的应用.写完这篇博客会做一个登陆界面+后台管理(i try...) 一.菜单实例 最开始的界面: 点击菜单三后的界面: 二. ...
- 前端跨域实现的几种方式?及使用Nginx反向代理配置。
早期为了防止CSRF(跨域请求伪造)的攻击,浏览器引入了同源策略(SOP)来提高安全性.而所谓"同源策略",即同域名(domain或ip).同端口.同协议的才能互相获取资源,而不能 ...
随机推荐
- webpack 样式表抽离成专门的单独文件并且设置版本号
先以下的 css 的处理我们都把 mode 设置为 production. webpack4 开始使用: mini-css-extract-plugin插件, 1-3 的版本可以用: extract- ...
- Gulp 前端优化
使用方法: 下载 node.js , https://nodejs.org/en/,并安装 msi 一下命令都属于 dos 命令 node -v,npm -v,检验是否下载成功(出现版本号) 将 np ...
- thymeleaf th:href url传递多参数
<a th:href="@{/teacherShowMember(class_id=${class.classId},class_name=${class.className})}&q ...
- Python基础之函数和模块
函数的基本使用 函数的定义:把具有独立功能的代码块组织成一个小模块,在需要的时候调用.或者说,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数的使用:1.定义函数:2.调用函数 ...
- Node.js在指定的图片模板上生成二维码图片并附带底部文字说明
在Node.js中,我们可以通过qr-image包直接在后台生成二维码图片,使用方法很简单: var qr = require('qr-image'); exports.createQRImage = ...
- 使用axios 的post请求下载文件,
axios({ method: 'post', data: param, responseType:'blob', url: _urls + '/Downloaddata' }).then(data= ...
- Cookie Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- 类LinkedList
LinkedList特点 java.util.LinkedList 集合数据存储的结构是链表结构.方便元素添加.删除的.LinkedList是List的子类,List中的方法LinkedList都是可 ...
- java基础-02数据类型
基本类型 整数 byte byte 数据类型是8位.有符号的,以二进制补码表示的整数 最小值是 -128(-2^7) 最大值是 127(2^7-1) 默认值是 0 byte 类型用在大型数组中节约空间 ...
- react中的this.setState()
修改组件的状态可以使用的一些方法: 1.比较常用的 this.setState({ message:"你好" }) 2.state更新是异步的时候 因为this.props和thi ...