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).同端口.同协议的才能互相获取资源,而不能 ...
随机推荐
- Eclipse导出包含第三方Jar的工程
基于第三方开源的Jar包封装了一个工具类,在导出成Jar包后,引用新生成的Jar包,却报找不到类的错误.看了一下生成的Jar包,发现根本没有包含第三方Jar包的相关class.这是导出第三方Jar包时 ...
- Android设计模式总结
1.复合模式:三层架构.MVC.MVP.MVVM 2.设计模式-单例模式 配置类的使用. 3.设计模式-模板方法 通过抽象类或接口提前定义要实现的方法. 4.设计模式-观察者模式 消息的通知. 5.设 ...
- ASP.NET Zero--WEB.HOST应用程序
WEB.HOST应用程序 AspNet Zero解决方案包含一个额外的项目Web.Host,它将所有应用程序功能公开为API.因此,您可以从任何设备使用API.实际上,Web.Mvc项目也是这样做 ...
- .net core 命令行(仅作记录)
命令大全:dotnet 命令 创建NuGet包:如何使用 .NET Core 命令行接口 (CLI) 工具创建 NuGet 包
- [转]Lua和Lua JIT及优化指南
一.什么是lua&luaJit lua(www.lua.org)其实就是为了嵌入其它应用程序而开发的一个脚本语言, luajit(www.luajit.org)是lua的一个Just-In-T ...
- Python基础之字典
字典初识 字典的认识 首先,我们来认识一下字典: # 定义一个字典 user_dict = {"name": "zhangsan", "age&quo ...
- ThreadLocal源码解读
1. 背景 ThreadLocal源码解读,网上面早已经泛滥了,大多比较浅,甚至有的连基本原理都说的很有问题,包括百度搜索出来的第一篇高访问量博文,说ThreadLocal内部有个map,键为线程对象 ...
- Winform开发的应用环境和相关技术介绍
随着时间的推移,Winform也算是能够坚持下来最久的技术之一了,它的昔日辉煌和现今的依旧活跃,导致了它依旧拥有者很庞大的用户群体,虽然目前很多技术日新月异的,曾经的ASP.ASP.NET WebFo ...
- 是时候理解下HTTPS的原理及流程了
1.什么是HTTP协议? HTTP协议是Hyper Text Transfer Protocol(超文本传输协议),位于TCP/IP模型当中的应用层.HTTP协议通过请求/响应的方式,在客户端和服务端 ...
- 利用ELK分析Nginx日志生产实战(高清多图)
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...