由于同源策略,跨域(协议、域名、端口均相同的为同域)之间是不允许请求资源的,但是scrapt标签不收跨域约束,如论是jQuery中的jsonp还是angularjs中的jsonp都是通过script来实现跨域请求的。

注意:
  1、跨域请求是通过get方式进行的,参数会连到url后;
  2、jsonp需要设置回调函数,前端需要定义回调函数,后端也需要有回调函数的相关处理,否则请求不会成功。

jsonp自定义方法一(简易版):

var ajax = function(params) {var callbackName = params.jsonp;window[callbackName] = function (json) {console.log("callback:");console.log(json);};var script = document.createElement('script');script.setAttribute("type","text/javascript");script.src = params.url+params.jsonp;var head = document.getElementsByTagName('head')[0];head.appendChild(script);}ajax({"url":"/userInvite/saveLog.do?regKey=eUa%252Fv70AeBC2QolRKlUNJA%253D%253D&refererUrl=www.baidu.com&guid=&callback=",    // 请求地址"jsonp":"success_jsonpCallback",  // 回调函数名为"success_jsonpCallback",可以设置为合法的字符串})

jsonp自定义方法二:

var ajax = function ajax(params) {params = params || {};params.data = params.data || {};jsonp(params);// 定义jsonp方法function jsonp(params) {//创建script标签并加入到页面中var callbackName = params.jsonp;var head = document.getElementsByTagName('head')[0];// 设置传递给后台的回调参数名,可以自定义回调函数名params.data['callback'] = callbackName;var data = formatParams(params.data);var script = document.createElement('script');head.appendChild(script);//发送请求script.src = params.url + '?' + data;//创建jsonp回调函数(发送请求后会得到后台结果,然后调用该回调函数)window[callbackName] = function (json) {//json为后台返回的请求结果,后台已完成该次请求的响应,之后将创建的script移除head.removeChild(script);clearTimeout(script.timer);window[callbackName] = null;//成功响应后做的处理params.success && params.success(json);};//为了得知此次请求是否成功,设置超时处理if (params.time) {script.timer = setTimeout(function () {window[callbackName] = null;head.removeChild(script);params.error && params.error({message: '超时'});}, time);}};//格式化参数function formatParams(data) {var arr = [];for (var name in data) {arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));}// 添加一个随机数,防止缓存arr.push('v=' + random());return arr.join('&');}// 获取随机数function random() {return Math.floor(Math.random() * 10000 + 500);}};    //使用实例
ajax({"url":"/userInvite/saveLog.show",    // 请求地址"jsonp":"success_jsonpCallback",  // 回调函数名为"success_jsonpCallback""data": {"regKey":sourceType,  "refererUrl":referUrl|| "","regGuid":cookieTest},success:function(res){   // 请求成功的回调函数if(res != null){console.log("跨域请求成功!");}},error: function(error) {}   // 请求失败的回调函数*/});

自定义原生jsonp跨域请求相关推荐

  1. 原生JS实现Ajax和JSONP跨域请求

    背景: 对接身份证录入和门锁卡号录入设备中,安装驱动完成后,提供的接口服务是http://localhost:8099/?cmd=readbcardid&charset=gbk,返回的数据格式 ...

  2. .net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器...

    1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.We ...

  3. JS的jsonp是什么?5分钟学会jsonp跨域请求

    一.jsonp是什么? jsonp是解决跨域请求的一种技术.浏览器为了防止CSRF攻击会采用同源策略(协议/主机/端口均相同)限制,对非同源发起http请求(即跨域请求)会被浏览器阻止. 二.json ...

  4. JSONP跨域请求数据报错 “Unexpected token :”的解决办法

    原文  http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 "Uncaught SyntaxError ...

  5. Jsonp 跨域请求实例

    Jsonp 跨域请求实例 关于jsonp的一个实例,其实自己也不是很了解,今天下午稍微研究了一下: 简单来说,jsonp就是为了两个不同网站之间数据传递而产生的,主要用于js脚本,因为浏览器本身是禁止 ...

  6. jsonp跨域请求响应结果处理函数(python)

    接口测试跨域请求接口用的jsonp,需要将回调函数里的json字符串提取出来. jsonp跨域请求的响应结果格式: callback_functionname(json字符串). #coding:ut ...

  7. 轻松搞定JSONP跨域请求

    轻松搞定JSONP跨域请求 一.同源策略 要理解跨域,先要了解一下"同源策略".所谓同源是指,域名,协议,端口相同.所谓"同源策略",简单的说就是基于安全考虑, ...

  8. 实现百度下拉菜单实例(利用jsonp跨域请求百度数据接口)

    JSONP:是JSON  with padding(填充式JSON或参数式JSON)的简写,它由两部分组成:回调函数和数据.回调函数是当响应到来时应该在页面中调用的函数,回调函数的名字一般是在请求中指 ...

  9. 【漏洞利用】JSONP跨域请求漏洞 挖掘、利用详解

    参考文章 轻松搞定JSONP跨域请求 jsonp跨域原理,使用以及同源策略 跨域漏洞丨JSONP和CORS跨域资源共享 Tag: Ref: [[019.同源策略]] 本片文章仅供学习使用,切勿触犯法律 ...

最新文章

  1. 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)
  2. R语言画形状—直线、矩形、多边形等
  3. Kibana模块——介绍
  4. 单张图像就可以训练GAN!Adobe改良图像生成方法 | 已开源
  5. linux路由表命令
  6. SqlServer为什么自动在主键上建立聚集索引
  7. 手动建立makefile简单实例解析
  8. java hashmap putall_Java ConcurrentHashMap.putAll方法代码示例
  9. Java中高级核心知识全面解析——常用框架(SpringMVC-工作原理详解)
  10. 流利说公布上市后首份财报:第三季净收入1.8亿
  11. 省市区三级联动菜单(附数据库)
  12. 三角数数列与杨辉三角
  13. 【WebRTC】几个重要sdp参数描述
  14. 编程c语言中文图形代码,C语言图形编程代码
  15. 【gp数据库】统计常用窗口函数详解
  16. DataV阿里云可视化(地图下钻、数据获取) - 文档篇
  17. python怎么转义_python怎么转义
  18. EntityWrapper
  19. 二次函数顶点式计算机,顶点式二次函数表达式
  20. C# 窗体修改应用程序图标

热门文章

  1. 哪个程序猿还没段风花雪月的错过
  2. MYSQL相比于其他数据库有哪些特点?
  3. 数据结构课程设计-哈夫曼树及其应用
  4. bilibili 视频网址
  5. OLTP与OLAP是什么?
  6. SAP 常用后台配置
  7. 青海国家沙漠公园分布及功能区划
  8. 基于Edge浏览器的沙拉划词插件使用教程(好用的翻译插件)
  9. latex按照知网格式引用论文
  10. 奇葩!小米手机自带浏览器css兼容问题,强制屏蔽、隐藏类名为 top_box 的元素。