参考文献:

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&regionId=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&regionId=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&regionId=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&regionId=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&regionId=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的更多相关文章

  1. 关于IONIC 报错 XX is not a function

    刚开始 做一个项目,总是报错"XX is not  a function"   最后发现 原因 ,   原来是 服务的 注入位置 有问题. angular.module(" ...

  2. 学习angularjs时遇到 XX is not a function

        第一次练习就直接没效果:   "后不能直接以 function XXXcontroller (){ code......}这样的方式直接注册监听器了. 以后必须angular.mod ...

  3. jquery插件一直报错:xx is not a function

    当然像js文件未引用或者js插件使用方法不对这样的解决办法想必大家都已经试过了. 那么在放弃前请最后看一下是不是引用了两个jquery文件. 引用了两个jquery文件! 引用了两个jquery文件! ...

  4. var 与function的权重浅析

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 15分XX秒后订单自动关闭(倒计时)

    //订单记录 function get_order(){ //请求订单ajax方法 XX.send_api("method",{data},function(){ var date ...

  6. 跨域名设置cookie或获取cookie

    可以使用jquery里面的ajax中的jsonp的方式来访问就可以了.代码如下: $.ajax({ url: 'your url', data: {'xx' : 'xx', 'xx2' : 'xx2' ...

  7. iOS之UIWebView无法获取web标题

    最近遇到了一个问题,就是在UIWebView的代理方法里,执行document.title的js代码无法获取网页标题,代码如下: - (void)webViewDidFinishLoad:(UIWeb ...

  8. :jQuery实例【DEMO】

    前言: 今天2月最后一天,写一篇jQuery的几个实例,算是之前前端知识的应用.写完这篇博客会做一个登陆界面+后台管理(i try...) 一.菜单实例 最开始的界面: 点击菜单三后的界面:   二. ...

  9. 前端跨域实现的几种方式?及使用Nginx反向代理配置。

    早期为了防止CSRF(跨域请求伪造)的攻击,浏览器引入了同源策略(SOP)来提高安全性.而所谓"同源策略",即同域名(domain或ip).同端口.同协议的才能互相获取资源,而不能 ...

随机推荐

  1. Spring SpringMVC MyBatis配置笔记

    工程大致结构: project |-src |----pojo |--------Temp.java |----dao |--------TempDao.java |--------TempDao.x ...

  2. 利用data-src属性 更换图片

    <div class="img_src"> <img src="./images/luo.png"></div> <u ...

  3. 第八课 表格 html5学习3

    表格用来处理表格式数据的,不是用来布局的. 一.基本语法格式 <table> <tr> 行标签 <td></td> 单元格标签 </tr> ...

  4. MIUI12系统怎么样开启Root超级权限的流程

    MIUI12系统能有啥方法开启root超级权限?各位都清楚,Android机器有root超级权限,如果手机开启root相关权限,可以实现更好的功能,举例子,各位公司的营销部门,使用某些营销软件都需要在 ...

  5. JS 引入方式 基本数据类型 运算符 控制语句 循环 异常

    一.JS引入方式 什么是JavaScript? JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互,JavaScript是浏览 ...

  6. Git - git tag - 查看当前分支 tag 版本&说明

    索引: 目录索引 参看代码 GitHub: git.txt 一.示例: git tag -l -n 二.说明: 1."tag" 部分 tag 代表的是标签动作,可以带参数 ,也可以 ...

  7. netstat -an查看到大量的TIME_WAIT状态的解决办法

    netstat下time_wait状态的tcp连接: 1.这是一种处于连接完全关闭状态前的状态: 2.通常要等上4分钟(windows server)的时间才能完全关闭: 3.这种状态下的tcp连接占 ...

  8. 我喜欢的vs code快捷键for mac

    mac上的快捷键,尽量是像我用vs studio上靠近. cmd+K+S: 显示快捷键列 cmd+shift+p: 系统配置命令行 cmd+p:项目中文件列表,选择文件 cmd+shift+o:当前文 ...

  9. SQL实验一

    一.实验目的: 了解数据库的结构特点.领会数据库中三种类型的文件特点 学会创建和管理数据库的方法 了解SQL SERVER的基本数据类型 了解表结构的特点,学会创建和管理表的方法 学会使用T-SQL语 ...

  10. python上下文管理

    一.python上下文介绍: python中的上下文,指的就是代码所执行的环境状态,或者运行的场景 python上下文管理器规定了某个对象的使用范围,当进入或者离开了使用范围,会有相应的操作,多用于资 ...