


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
时间过得好快,又被拉回js战场时, 跨域问题这个伤疤又开疼了. 好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅了相关资料,算是解决了跨域问题.有必要记下来备忘. 跨域的安全限制都是指浏览器端来说的.服务器端是不存在跨域安全限制的, 所以通过本机服务器端通过类似httpclient方式完成“跨域访问”的工作,然后在浏览器端用AJAX获取本机服务器端“跨域访问”对应的url.来间接完成跨域访问也是可以的.但很显然开发量比较大,但限制也最少,很多widget开放平台server端(如sohu博客开放平台)其实就么搞的.不在本次讨论范围. 要讨论的是浏览器端的真正跨域访问,推荐的是目前jQuery $.ajax()支持get方式的跨域,这其实是采用jsonp的方式来完成的. 真实案例: 复制代码 代码如下:var qsData = searchWord:$(#searchWord).attr(value),currentUserId:$(#currentUserId).attr(value),conditionBean.pageSize:$(#pageSize).attr(value); $.ajax( async:false, url: http:/跨域的dns/document!searchJSONResult.action, type: GET, dataType: jsonp, jsonp: jsoncallback, data: qsData, timeout: 5000, beforeSend: function() /jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了 , success: function (json) /客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数 if(json.actionErrors.length!=0) alert(json.actionErrors); genDynamicContent(qsData,type,json); , complete: function(XMLHttpRequest, textStatus) $.unblockUI( fadeOut: 10 ); , error: function(xhr) /jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了 /请求出错处理 alert(请求出错(请检查相关度网络状况.); ); 注意:$.getJSON( http:/跨域的dns/document!searchJSONResult.action?name1=+value1+&jsoncallback=?, function(json) if(json.属性名=值) / 执行代码 ); 这种方式其实是上例$.ajax(.) api的一种高级封装,有些$.ajax api底层的参数就被封装而不可见了. 这样,jquery就会拼装成如下的url get请求 http:/跨域的dns/document!searchJSONResult.action?&jsoncallback=jsonp1236827957501&_=1236828192549&searchWord=%E7%94%A8%E4%BE%8BtUserId=5351&conditionBean.pageSize=15 在响应端(http:/跨域的dns/document!searchJSONResult.action), 通过 jsoncallback = request.getParameter(jsoncallback) 得到jquery端随后要回调的js function name:jsonp1236827957501 然后 response的内容为一个Script Tags:jsonp1236827957501(+按请求参数生成的json数组+); jquery就会通过回调方法动态加载调用这个js tag:jsonp1236827957501(json数组); 这样就达到了跨域数据交换的目的. jsonp的最基本的原理是:动态添加一个标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了. 这样其实jQuery AJAX跨域问题就成了个伪命题了,jquery $.ajax方法名有误导人之嫌. 如果设为dataType: jsonp, 这个$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议. JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问 JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求, 我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。 这种跨域的通讯方式称为JSONP。 jsonCallback 函数jsonp1236827957501(.): 是浏览器客户端注册的,获取跨域服务器上的json数据后,回调的函数 jQuery 跨域访问问题解决方法浏览器端跨域访问一直是个问题, 多数研发人员对待js的态度都是好了伤疤忘了疼,所以病发的时候,时不时地都要疼上一疼.记得很久以前使用iframe 加script domain 声明,yahoo js util 的方式解决二级域名跨域访问的问题. Jsonp原理: 首先在客户端注册一个callback (如:jsoncallback), 然后把callback的名字(如:jsonp1236827957501)传给服务器。 此时,服务器先生成 json 数据。 然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsoncallback的值 jsonp1236827957501 . 最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。 客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时javascript文档数据,作为参数, 传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json)里.(动态执行回调函数) 可以说jsonp的方式原理上和是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的) .JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患. 注意,jquey是不支持post方式跨域的. 为什么呢? 虽然采用post +动态生成iframe是可以达到post跨域的目的(有位js牛人就是这样把jquery1.2.5 打patch的),但这样做是一个比较极端的方式,不建议采用. 也可以说get方式的跨域是合法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脑动脉瘤合并介入护理查房
- 2025本溪市第一中学面向高等院校应届毕业生校园招聘教师考前自测高频考点模拟试题及答案详解参考
- 2025北京大学高分子化学与物理教育部重点实验室主任招聘考前自测高频考点模拟试题及参考答案详解一套
- 贵州国企招聘2025锦屏县粮食购销公司招聘工作人员笔试历年参考题库附带答案详解
- 浙江国企招聘2025宁波甬山控股集团有限公司公开招聘面谈笔试历年参考题库附带答案详解
- 2025重庆石柱土家族自治县广播电视台第二次招聘临时人员4人笔试历年参考题库附带答案详解
- 2025重庆市地质矿产勘查开发集团有限公司招聘17人笔试历年参考题库附带答案详解
- 2025贵州黔东南州凯里瑞禾农业投资(集团)有限责任公司招聘4人笔试历年参考题库附带答案详解
- 2025贵州贵阳机场股份公司飞机地勤分公司招聘8人笔试历年参考题库附带答案详解
- 2025福建漳州市古雷港经济开发区城市巡防应急服务有限公司招聘12人笔试历年参考题库附带答案详解
- 2022年国家公务员考试《行测》真题(地市级)及答案解析
- 人教版九年级初中化学实验报告单电子版
- 水利水电工程单元工程施工质量验收评定表及填表说明
- 高速铁路概论 课件 第4章 高速铁路动车组
- DL∕T 831-2015 大容量煤粉燃烧锅炉炉膛选型导则
- 工业园区环保管家技术方案
- 《西方管理思想史》课件
- 纽伦堡审判国际法
- 2024年中国东方航空集团招聘笔试参考题库含答案解析
- 妇产科国家临床重点专科验收汇报
- 2023国际功能、残疾和健康分类康复组合(ICF-RS)评定标准
评论
0/150
提交评论