ajax实现跨域访问的两种方式
一、使用jsonp实现跨域请求
在前端开发这中你会发现,所有带src属性的标签都可以跨域访问其他服务器文件。jsonp实现的原理也是如此。
以jsonp的数据类型进行请求时,JQ会动态在页面中添加script标签,将请求内容放置到src中。
jsonp类型请求数据时,无法使用post方式(你会发现,在JQ中即使你将type设置为POST方式,JQ也会将其转换为get方式请求)。
jsonp方式请求不支持修改头部信息参数。服务器端数据返回也需要做相应的处理,返回的数据必须是一个JS代码。Jsonp请求时,设置jsonpCallback参数假设为reciver,服务器处理数据返回格式类似于reviver('datas need retun '),请求成功后,会自动调用前端reciver方法。
JQ前端请求代码:
- $.ajax({
- type: "get",
- async: false,
- url: "http://192.168.2.229:8081/api/web_search_directnew.html",
- dataType: "jsonp",
- jsonpCallback: "receive", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
- success: function(data) {
- console.log(data)
- },
- error: function() {
- alert('fail');
- }
- });
- function receive(data){
- }
java后台代码:
- def index() {
- def a = [:]
- a.name = "张小白"
- a.age = 12
- a.sex = '男'
- a = a as JSON
- render params.callback + "('" + a + "')"
- }
二、Access-Control-Allow-Origin
浏览器限制:Chrome 3+,Firefox 3.5+,Opera 12+,Safari 4+,IE 8+
js代码:
- $.ajax({
- url: "http://192.168.2.229:8091/myTest/hellow/index",
- type: "POST",
- crossDomain: true,
- dataType: "json",
- success: function(result) {
- alert(JSON.stringify(result));
- },
- error: function(xhr, status, error) {
- alert(status);
- }
- });
服务器:
response.addHeader( "Access-Control-Allow-Origin", "http://192.168.2.229:8020" )
我自己尝试之后的代码,可供参考:
js代码
function sub(){
var uname = $("#uname").val();
var upass = $("#upass").val();
var url = "/system/do_login1.htm";
$.ajax({
type: "POST",//请求方式
url: url,
dataType:"jsonp",
jsonp:"jsonpCallback",
data: {
"uname": uname,
"upass": upass
},
success : function(msg) {
alert(msg)
},
});
}
后台代码
@RequestMapping("/system/do_login1.htm")
public void isUser(HttpServletRequest request,HttpServletResponse response,
ModelMap map,String uname,String upass) throws Exception{
TSysUser sysUser = sysUserManager.getSysUserByLogin(uname, upass);
Gson gson = new Gson();
String jsonpCallback = request.getParameter("jsonpCallback");
if(sysUser != null){
String massage = "验证成功";
response.getWriter().print(jsonpCallback+"("+gson.toJson(massage)+")");
}else{
String massage = "用户名或密码错误";
response.getWriter().print(jsonpCallback+"("+gson.toJson(massage)+")");
}
}
ajax实现跨域访问的两种方式的更多相关文章
- System.Web.Http.Cors配置跨域访问的两种方式
System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...
- Ajax实现跨域访问的两种方法
调程序时遇到"已拦截跨源请求:同源策略禁止读取位于--的远程资源",这是因为通过ajax调用其他域的接口会有跨域问题. 解决方法如下: 方法一:服务器端(PHP)设置header头 ...
- Ajax实现跨域访问的三种方法
转载自:http://www.jb51.net/article/68424.htm 一.什么是跨域 我们先回顾一下域名地址的组成: http:// www . google : 8080 / scri ...
- 解决Entity Framework查询匿名对象后的跨域访问的一种方式
在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...
- WEX5中ajax跨域访问的几种方式
1.使用jsonp方式 使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callba ...
- 【js跨域】js实现跨域访问的几种方式
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
问题: XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present ...
- ajax实现跨域访问
ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...
- ajax的data传参的两种方式
ajax的data传参的两种方式 本文为转载. 1.[javascript] view plain copy /** * 订单取消 * @return {Boolean} 处理是否成功 */ func ...
随机推荐
- Linux档案权限与目录配置
一.档案权限: Linux 最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的档案数据,因此档案的权限管理就变的很重要了. Linux 一般将档案可存取的身份分为三个类别,分别 ...
- new Date的兼容性问题
标准浏览器下正常,结果ie.老版本的IOS微信公众号不支持,搞不懂,原来有兼容性问题 //beginData格式为'yyyy-mm-dd' 1 var _date = new Date(Date.pa ...
- New FileReader上传图片
function readURL(input) { if (input.files && input.files[0]) { var reader = new FileReader() ...
- STL --> queue单向队列
queue单向队列 queue 模板类的定义在<queue>头文件中.与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器 ...
- java各种概念 Core Java总结
Base: OOA是什么?OOD是什么?OOP是什么?{ oo(object-oriented):基于对象概念,以对象为中心,以类和继承为构造机制,来认识,理解,刻画客观世界和设计,构建相应的软件系统 ...
- java排序算法(五):快速排序
java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...
- Oracle查询优化改写--------------------单表查询
一.查询表中所有的行与列 二.从表中检索部分行 三.查找空值 四.将空值转化为实际值(coalesce) 五.查找满足多个条件的行(查询部门为10中所有的员工.所有得到提成的员工,以及部门20中工资不 ...
- ListView属性及divider设置分割线
给ListView设置分割线,只需设置如下两个属性: android:divider="#000" //设置分割线显示颜色 android:dividerHeight=" ...
- 【LATEX】个人版latex论文模板
以下是我的个人论文模板,运行环境为Xelatex(在线ide:Sharelatex.com) 鉴于本人常有插入程序的需求,故引用了lstlisting \RequirePackage{ifxetex} ...
- 2017-2018-1 Java演绎法 第二周 作业
团队任务:讨论Android上的游戏软件 参考现代软件工程 第一章 [概论]练习与讨论: 软件有很多种,也有各种分类办法,本次团队任务是讨论选取Android上的一个游戏软件,考虑到每位组员接触的游戏 ...