这次给大家带来JSONP实现原理与案例详解,JSONP实现的注意事项有哪些,下面就是实战案例,一起来看一下。
跨域问题一直是前端中常见的问题,每当说到跨域,第一浮现的技术必然就是JSONP
JSONP在我的理解,它并不是ajax,它是在文档中插入一个script标签,创建_callback方法,通过服务器配合执行_callback方法,并传入一些参数
JSONP的局限就在于,因为是通过插入script标签,所以参数只能通过url传入,因此只能满足get请求,特别jQuery的ajax方法时,即使设置type: 'POST',但是只要设置了dataType: 'jsonp',在请求时,都会自动使用GET请求
实现逻辑
step1: 创建_callback方法 (_callback中可以删除script标签和_callback方法)
step2: 插入script标签
step3: 服务器输出js
实现:
var requestJsonp = function (opt) { var funName, script; /* * step1 创建_callback方法 */ //_callback函数名 funName = '_cb' + (Math.random() * 1000000); //创建_callback方法 window[funName] = function (data) { if (typeof opt.success == 'function') { opt.success(data); } window[funName] = null; delete window[funName]; document.body.removeChild(script); script = null; }; /* * step2 插入script标签 */ script = document.createElement('script'); script.type = 'text/javascript'; script.src = opt.url + (opt.url.indexOf('?') > -1 ? '&' : '?') + '_callback=' + funName; document.body.appendChild(script); /* * step3 服务器输出js * 服务器应接受url参数中_callback的值,作为函数名执行输出js * 类似输出 * _callback({"name":"jsonp","description":"jsonp test"}); */ /* * 处理error */ script.addEventListener('error', function () { window[funName] = null; delete window[funName]; if (typeof opt.error == 'function') { opt.error(); } document.body.removeChild(script); script = null; }); }; requestJsonp({ url: 'http://www.url.org?tid=Jsx2', success: function (data) { console.log(data); }, error: function () { console.log('request error!'); } });
对于浏览器的行为就是插入script标签,执行js代码, 删除script标签
实现代码并没有考虑兼容以及传入data后生成url的问题。
下面给大家说下jsonp的优缺点:
JSONP的优点是:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持;并且在请求完毕后可以通过调用callback的方式回传结果。
JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是JSONP实现原理与案例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3汉化版
中文版,非常好用

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver Mac版
视觉化网页开发工具