Jquery跨域请求php数据(jsonp)
Jquery跨域请求php数据
我们一般用到ajax的时候是在同服务器下,一般情况下不会跨域,但有时候需要调用其他域名或ip下的数据的时候,遇到跨域请求数据的时候。
今天在工作中碰到javascript(以下简称js)跨域的问题,以前有看过相关的文章不过没有亲自操作实践只是浏览了一下。由于很多页面调用相同的东西,我把需要出来操作的js代码统一放在了一个命名为.js文件中,如果是主域名访问不会出现什么问题,二级域名访问死活代码没有执行,纠结了我很长时间,不过最终还是搞定了,以下作为这次经过和经验的总结!
什么引起了ajax不能跨域请求的问题?
ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。
跨域的安全限制都是指浏览器端来说的,服务器端是不存在跨域安全限制的。所以针对这2种情况衍生出2类跨域解决方案,一类是服务器端做中转类似代理方式,一类是js处理浏览器端的真正跨域访问。
以下代码是我写在js文件中的一部分代码:
$.ajax({type:'get',url:"",//将要请求的方式contentType: "application/json",//contentTy类型data:"",dataType:'jsonp',//数据格式jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据success : function(data){//请求成功 alert($data);},error: function () {//请求失败 } });
以上代码是用于请求php文件异步获取数据实现二级联动菜单.或许你看到了标红的字样,平常异步调用数据dataType使用的都是json,而标红的是jsonp!是的你没有看错就是jsonp。
两者有什么请区别呢?
JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议。
请求的php文件返回数据的格式为json,范例代码如下:
$result = json_encode(array($data)); echo "flightHandler($result)";//此处的flightHandler是上面$ajax中jsonpCallback定义的名称,由于jquery已经封装好了jsonp可以直接拿去用。 //当使用jsonp时,使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 //有人建议此处的函数名称可以弄成动态获取的,为了实现不同的操作代码范例://或 $method = isset($_GET[‘method’])?trim($_GET[‘method’]):’flightHandler’;//获取方法名称 $result = json_encode(array($data)); echo $method ."($result)";
Jsonp原理:
1):首先在客户端注册一个callback (如:’jsoncallback’), 然后把callback的名字(如:jsonp1236827957501)传给服务器。
此时,服务器先生成 json 数据。
2):然后以 js语法的方式,生成一个function , function 名字就是传递上来的参数 ‘jsoncallback’的值jsonp1236827957501 .
3):最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。客户端浏览器,解析js标签,并执行返回的js 文档,此时js文档数据,作为参数,传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里.(动态执行回调函数)
可以说jsonp的方式原理上和是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的) .JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患.
转载于:https://www.cnblogs.com/fps2tao/p/8723029.html
Jquery跨域请求php数据(jsonp)相关推荐
- jQuery使用ajax跨域请求获取数据
jQuery使用ajax跨域请求获取数据 跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内 ...
- 浏览器禁止跨域请求json数据解决方法--jsonp
浏览器禁止跨域请求json数据解决方法--jsonp 参考文章: (1)浏览器禁止跨域请求json数据解决方法--jsonp (2)https://www.cnblogs.com/uyisi/p/56 ...
- 实现百度下拉菜单实例(利用jsonp跨域请求百度数据接口)
JSONP:是JSON with padding(填充式JSON或参数式JSON)的简写,它由两部分组成:回调函数和数据.回调函数是当响应到来时应该在页面中调用的函数,回调函数的名字一般是在请求中指 ...
- 本地主机作服务器解决AJAX跨域请求访问数据的方法
本地主机作服务器解决AJAX跨域请求访问数据的方法 参考文章: (1)本地主机作服务器解决AJAX跨域请求访问数据的方法 (2)https://www.cnblogs.com/QiScript/p/5 ...
- 使用YQL解决跨域请求json转jsonp问题
一.跨域报错 首先,是跨域请求的问题,jQuery默认不支持跨域请求,报错如下: index.html:1 XMLHttpRequest cannot load http://www.weather. ...
- ajax跨域请求jsp数据
最近的开发中,应工作需要,把java代码在了jsp上,而且还需要通过ajax跨域请求这个方法,并且返回数据.遇到了跨域请求 以及contentType错误,我把我的代码贴出,供大家参考. html页面 ...
- 自定义jQuery 跨域请求 callback 函数名
jQuery的getJSON方法在跨域请求时,只要在请求地址后面跟上callback=?就可以实现非常方便,请求时系统会用自动生成的回调函数名来替换问号. 如果想对请求页面做缓存问题就来了,callb ...
- 跨域请求(使用jsonp实现跨域请求)百度地图api证逆地址解析获取周边信息(pois)
新手程序员,新手博客,如果那里写的不好,还请大神们补充,指错 最近项目里面需要做一个电子围栏的功能,我这边做的就是需要把商户的地址的经纬度存进数据库,本来这些从百度地图API里面有Demo可以看,但是 ...
- 关于jquery跨域请求方法
项目中关于ajax jsonp的使用, 出现了问题:可以成功获得请求结果,但没有执行success方法 总算搞定了,记录一下 function TestAjax() { $.ajax({ ...
最新文章
- Openresrt最佳案例 | 第2篇:Lua入门
- linux jna调用so动态库
- matlab生成m序列的方法
- 零基础学UI设计,哪些知识需要重点学习?
- 【转】Bresenham快速画直线算法
- c++ 获取当前时间_【Python】日期和时间
- RHEL 6 关闭ThinkPad 触摸板
- python-自动发邮件
- .NET 动态脚本语言Script.NET系列文章汇总 非常精彩的应用举例
- 杨氏模量_用作癌症放疗定位膜的交联聚己内酯的结晶度与杨氏模量之间的关系研究|Global Challenges...
- [转]Vector、ArrayList和hashtable hashmap数据结构
- windows程序静默安装
- react 生命周期函数
- 夏天这四件事会耗干你的阳气,尤其是第三件!
- vbs 读unicode 编码格式的文件
- 上传excel,并保存excel内容
- 农学院计算机考试题,天津农学院计算机考试参考.doc
- Apache Doris 的一场编译之旅
- 内存不能为“read”或written的解决
- PMP考试报名费用可以怎么支付?给你说明白
热门文章
- java 简单阻塞队列,制作一个简单的任务队列(使用阻塞队列)
- 远程开启admin$共享(远程管理需开启如dameware软件)
- SaCa DataViz 企业版 | 高性能大数据分析引擎
- 学习Java必须避开的十大致命雷区,新手入门千万不要踩!
- Linux-pthread如何设置线程的优先级
- [转] Sublime Text3 配置 NodeJs 环境
- 翻身的废鱼——论PHP从入门到放弃需要多久?13
- PHP5.3版本安装
- [图像]张正友论文翻译(2)
- php变量的几种写法