Ajax跨域请求怎么解决?
前言
项目中需要将第三方系统中,对应用户的代办消息集成到系统中。对方提供了获取对应用户的接口url,但是由于两边的系统是部署到客户现场不同IP的虚机上的,所以进行ajax请求的时候是属于跨域请求的。之前基本没有出现过这种情况,但是知道有跨域这个点,具体怎么解决,只知道ajax 有datatype:'jsonp' 是解决跨域请求的。但是当时并没有解决问题,因为后台数据接口并没有提供jsonp格式的函数方法,而只是json。用ajax解析json 的那一套去解析jsonp,当然行不通了。
跨域请求的迹象?
No 'Access-Control-Allow-Origin' header is present on the requested resource.
此时就是在提示你 存在跨域请求,我也是在这个时候发现 了进行了跨域请求。然后,我在ajax中添加了 datatype:'jsonp' (不了解的童鞋请查看jquery官方文档中的$.ajax部分)进行跨域请求。但是,添加以后,居然还是提示错误:Uncaught SyntaxError: Unexpected token : (出现这个问题的原因就是 使用ajax 解析json 的方式直接去解析了jsonp格式,钥匙对不上锁...)
这个时候,就由于对跨域请求不是有很多了解,导致我知道出现了什么问题?但不知道怎么解决!很尴尬......>_<
接下来,就一起来看一下跨域请求中的问题以及如何解决 还有jsonp 解决跨域请求的原理是什么?
什么情况下属于跨域请求呢?
不同的域名或者不同的端口都属于跨域请求!
json格式与jsonp格式究竟有什么不同呢?
很直观的就能看到,jsonp外面多了一层callback嵌套。这个callback就是url中使用ajax 指定 datatype:'jsonp' 自动在url后面添加的 ....?callback=jquery1..... 其中callback的值就是jsonp得外层嵌套的函数名。那么后台有该如何解决呢?
后台代码增加跨域支持
获取request中参数 callback的值 然后对 返回的 json 进行 jsonp格式包装。 callback + "("+json+")"
如此后台代码添加对jsonp的跨域支持以后,就可以直接使用ajax指定datatype:'jsonp'的方式进行解析数据了。
jsonp是如何解决跨域请求的呢?
ajax跨域请求的解决办法有很多,其中jsonp是比较常用的方法,但是这种方法只支持GET请求,即使设置ajax请求方式为POST ,也会自动变更为GET请求。
script标签的src可以跨域请求资源,但是ajax请求不可以跨域请求。jsonp 就是利用这一特性进行的跨域请求。
1、 jsonp通过script标签的src可以跨域请求的特性,加载资源
2、 将加载的资源(通过一个方法名将数据进行包裹)当做是js脚本解析
3、 定义一个回调函数,获取传入的数据
Ajax跨域请求怎么解决?的更多相关文章
- JQuery的Ajax跨域请求的解决方式
今天在项目中须要做远程数据载入并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究 ...
- jQuery ajax跨域请求的解决方法
在Ajax应用中,jQuery的Ajax请求是非常容易而且方便的,但是初学者经常会犯一个错误,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数 ...
- Jquery DataTable AJAX跨域请求的解决方法及SSM框架下服务器端返回JSON格式数据的解决方法
如题,用HBuilder开发APP,涉及到用AJAX跨域请求后台数据,刚接触,费了不少时间.幸得高手指点,得以解决. APP需要用TABLE来显示数据,因此采用了JQ 的DataTable. 在实现 ...
- AJAX 跨域请求的解决办法:使用 JSONP获取JSON数据
由于受到浏览器的限制,ajax不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器 ...
- JQuery的Ajax跨域请求原理概述及实例
今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发 JQuer ...
- jquery ajax跨域的完美解决方法(jsonp方式)
ajax跨域请求的问题,JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式,接下来为大家详细介绍下客户端JQuery.ajax的调用代码 今天在项目中需要做远程数据加载 ...
- [转载]JQuery的Ajax跨域请求的解决方案
今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发现JQuer ...
- 用iframe设置代理解决ajax跨域请求问题
面对ajax跨域请求的问题,想用代理的方式来解决这个跨域问题.在服务器端创建一个静态的代理页面,在客户端用iframe调用这个代理 今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到aja ...
- 第114天:Ajax跨域请求解决方法(二)
一.什么是跨域 我们先回顾一下域名地址的组成: http:// www . google : 8080 / script/jquery.js http:// (协议号) www (子 ...
随机推荐
- tp框架 php5.5以上版本出现”No input file specified“错误问题解决
public文件夹下 .htaccess文件中的 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 在默认情况下会导致No input file specifie ...
- UVa 1609 - Foul Play
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Centos7 安装eclipse IDE for C++
1.安装前eclipse需要java, yum -y install java 查看版本java -version 2.下载eclipse IDE http://www.eclipse.org/dow ...
- js 实现分享功能
分享功能初步测试,title为当前页面的title. 其他详见注释!!! <!doctype html> <html> <head> <meta http-e ...
- Web Mercator公开的小秘密
网上已经有好多作者都不吝笔墨,写了好多有关 Web Mercator这个坐标系的前世今生.多搜罗多摄入,我们会得到很多有用的信息.今天讨论到 3758,3857,102100,900913…… 这些I ...
- 如何安装zip格式的MySQL
1.MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C: ...
- 【数据结构】浅谈倍增求LCA
思路 运用树上倍增法可以高效率地求出两点x,y的公共祖先LCA 我们设f[x][k]表示x的2k辈祖先 f[x][0]为x的父节点 因为从x向根节点走2k 可以看成从x走2k-1步 再走2k-1步 所 ...
- 分别利用(代码,Xib,SB)创建空的App工程
1. 利用代码: 2.利用XIB: 3.利用Storyboard: Xcode 7默认该方式创建项目工程,就不必多说了!
- 08 Oracle表碎片查询以及整理(高水位线)
Oracle表碎片查询以及整理(高水位线) 1.表碎片的来源 当针对一个表的删除操作很多时,表会产生大量碎片.删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用. 2.怎样确定是否有表碎片 ...
- Linux通过Shell脚本命令修改密码不需要交互
交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. pas ...