AngularJS实现跨域请求

跨域,前端开发中常常遇到的问题。AngularJS实现跨域方式类似于Ajax。使用CORS机制。

以下阐述一下AngularJS中使用$http实现跨域请求数据。

AngularJS XMLHttpRequest:$http用于读取远程server的数据

$http.post(url, data, [config]).success(function(){ ... });
$http.get(url, [config]).success(function(){ ... });
$http.get(url, [config]).success(function(){ ... });

一、$http.jsonp【实现跨域】

1. 指定callback和回调函数名,函数名为JSON_CALLBACK时,会调用success回调函数。JSON_CALLBACK必须全为大写。

2. 指定其他回调函数,但必须是定义在window下的全局函数。url中必须加上callback。

二、$http.get【实现跨域】

1. 在server端设置同意在其它域名下訪问

response.setHeader("Access-Control-Allow-Origin", "*"); //同意全部域名訪问
response.setHeader("Access-Control-Allow-Origin", "http://www.123.com"); //同意www.123.com訪问

2. AngularJS端使用$http.get()

三、$http.post【实现跨域】

1. 在server端设置同意在其它域名下訪问,及响应类型、响应头设置

response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods","POST");
response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");

2. AngularJS端使用$http.post(),同一时候设置请求头信息

$http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'Content-Type':'application/x-www-form-urlencoded'}).success(function(data){
		$scope.industries = data;
	});

四、实现方式

跨域方式一【JSONP】:

方法一:

$http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=JSON_CALLBACK&siteid=137bd406").success(function(data){ ... });
//  The name of the callback should be the string JSON_CALLBACK.

方法二【返回值。须要使用相应callback方法接收,但怎样置于$scope??

?】:

$http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=badgeabc&siteid=137bd406");
function badgeabc(data){ ... }
public String execute() throws Exception {
	String result = FAIL;
	response.setHeader("", "");
	SiteHandlerAction siteHandlerAction = (SiteHandlerAction)BeansFactory.getBean(SiteHandlerAction.class);
	BadgeHandlerAction badgeHandlerAction = (BadgeHandlerAction)BeansFactory.getBean(BadgeHandlerAction.class);
	if("".equals(siteid) || siteid == null || StringUtils.isBlank("jsonp")){
		result = FAIL;
	}else{
		Site site = siteHandlerAction.find(siteid);
		UserBadgeStatus userBadgeStatus = badgeHandlerAction.getUserBadgeStatus(site.getId());
		if(userBadgeStatus != null){
			result = "{\"t\":"+userBadgeStatus.getStyle()+",\"l\":"+userBadgeStatus.getSuspend_location()+",\"s\":"+site.getId()+"}";
			JSONObject jsonObj = JSONObject.fromObject(result);
			String json = jsonObj.toString();
			result = jsonp + "(" + json + ")";
		}
	}
	PrintWriter write = response.getWriter();
	write.print(result);
	write.flush();
	write.close();
	return NONE;
}

跨域方式二【$http.get()】:

function getAdustryController($scope,$http){
	$http.get('http://localhost/ajax/getAllIndustryCategoty.pt?languageColumn=name_eu').success(function(data){
		$scope.industries = data;
	});
}

跨域方式三【$http.post()】:

function getAdustryController($scope,$http){
	$http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'Content-Type':'application/x-www-form-urlencoded'}).success(function(data){
		$scope.industries = data;
	});
}
// java端支持跨域请求
public String execute(){
	response.setHeader("Access-Control-Allow-Origin", "*"); //同意哪些url能够跨域请求到本域
	response.setHeader("Access-Control-Allow-Methods","POST"); //同意的请求方法,通常是GET,POST,PUT,DELETE,OPTIONS
	response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type"); //同意哪些请求头能够跨域

	SiteHandlerAction SiteHandler = (SiteHandlerAction) BeansFactory.getBean(SiteHandlerAction.class);
	List<IndustryCategory> list = SiteHandler.getAllIndustryCategory(); //全部的分类集合
	JSONArray jsonArray = JSONArray.fromObject(list); //将list转为json
	String json = jsonArray.toString(); //转为json字符串
	try {
		PrintWriter write = response.getWriter();
		write.print(json);
		write.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
	return NONE;
}
<table ng-controller="getAdustryController">
	<tr ng-repeat='industry in industries'>
		<td>{{ industry.id }}</td>
		<td>{{ industry.name_ch }}</td>
		<td>{{ industry.name_eu }}</td>
		<td>{{ industry.name_jp }}</td>
	</tr>
</table>
时间: 2024-08-05 19:33:37

AngularJS实现跨域请求的相关文章

AngularJS跨域请求

本文主要针对网上各种跨域请求的总结,并加入自己的验证判断,实现工作中遇到的跨域问题.所涉及到的领域很小,仅仅局限于:AngularJS CORS post 并同时需要实现json数据传送给服务器. 首先,(博文是互相转载,也没有看出原作者和原网站,我摘写其中一段:)$http.post实现跨域: 在服务器端设置允许在其他域名下访问,及响应类型.响应头设置 response.setHeader("Access-Control-Allow-Origin","*"); r

JSonP跨域请求

我们在通过自己的页面或程序通过ajax请求其它网站或服务时,会存在一个ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准.不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>.<img>.<iframe>).   于是可以判断,当前阶段如果想通过纯web端(ActiveX控件.服

跨域请求资源的几种方式

跨域请求资源的几种方式 由于浏览器同源策略,凡是发送请求URL的协议.域名.端口三者之间任意一与当前页面地址不同即为跨域. (1)JSONP(jsonp跨域get请求) 这种方式主要是通过动态创建一个script标签,浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行:(创建script标签向不同域提交http请求的不会被拒绝的方法,jsonp标签的src属性是没有跨域限制的) 实际项目中JSONP通常用来获取json格式数据,这时前后端通常约定一个参数callback,

AJAX跨域请求数据

由于浏览器的同源策略 ajax请求不可以接收到请求响应回来的数据 请求数据需要调用浏览器的内置构造函数 XMLHttpRequest() 进行 实例对象 var xhr = new XMLHttpRequest(); 注意点 在IE8之前支持的 ActiveXobject("Microsoft.XMLHTTP");  记住要进行兼容处理哦  在这里我就不写了 通过该对象进行获取 获取数据的四种状态  xhr.readyState 该属性保存着请求数据的几种状态 1.xhr.open(请

解决前端跨域请求的几种方式

利用 JSONP 实现跨域调用 说道跨域调用,可能大家首先想到的或者听说过的就是 JSONP 了. 1.1 什么是JSONP JSONP 是 JSON 的一种使用模式,可以解决主流浏览器的跨域数据访问问题.其原理是根据 XmlHttpRequest 对象受到同源策略的影响,而 <script> 标签元素却不受同源策略影响,可以加载跨域服务器上的脚本,网页可以从其他来源动态产生 JSON 资料.用 JSONP 获取的不是 JSON 数据,而是可以直接运行的 JavaScript 语句. 1.2

JQuery的Ajax跨域请求的

JQuery的Ajax跨域请求的(Ajax) 什么是jsonp格式呢?API原文:假设获取的数据文件存放在远程server上(域名不同.也就是跨域获取数据),则须要使用jsonp类型.使用这样的类型的话,会创建一个查询字符串參数 callback=? .这个參数会加在请求的URL后面. server端应当在JSON数据前加上回调函数名.以便完毕一个有效的JSONP请求.意思就是远程服务端须要对返回的数据做下处理,依据client提交的callback的參数,返回一个callback(json)的

什么是跨域请求

昨晚在帮朋友解决问题的时候,遇到了一个问题,经过百度又让我理解了一个东西叫做:跨域请求.这个词其实不是第一次听到和看到,但是之前没有去细想,今晚将查找到的资料总个小总结. 浏览器均默认开启了同源策略,它指Ajax请求所在的页面和被请求的页面在协议.域名.端口均相同才能被访问,否则会提示如下错误: XMLHttpRequest cannot load xxxxxxx is not allowed by Access-Control-Allow-Origin. 之前还想过为什么,后来突然就明白了,很

PHP跨域请求nodejs

摘要:用nodejs作为服务器,php作为客服端进行跨域请求,并返回数据. 一:windows环境下的nodejs安装(以及express模板的安装):http://blog.uifanr.com/2013/03/12/472 http://www.veryhuo.com/a/view/39756.html 二:测试安装 1:在cmd中输入:node -v 若出现版本号,则安装成功. 2:在D 盘下新建一个文件  test_node.js : 1 var http = require("http

跨域请求问题

跨域请求,需要提供安全并且服务器认可的信息. 比如:A域名下的数据需要请求B域名下的一个方法,需要进行验证,或者可能需要获取B域名下cookie的某一个值,那么需要进行跨域请求. 如果我们使用普通的Ajax的json格式来进行请求,则会出现 XMLHttpRequest cannot load http://zhl.study.com/cross-domain.php. No 'Access-Control-Allow-Origin' header is present on the reque