AngularJS RESTful JSON请求与ngResource和Restangular
我对angularJS和REST请求/响应有一些问题。自从三周前我和AngularJS一起踢球,现在我想做一些很酷的事情。 首先,我创建了一个简单的jerseyREST服务,它返回一个简单的列表AngularJS RESTful JSON请求与ngResource和Restangular,rest,angularjs,jersey,Rest,Angularjs,Jersey,我对angularJS和REST请求/响应有一些问题。自从三周前我和AngularJS一起踢球,现在我想做一些很酷的事情。 首先,我创建了一个简单的jerseyREST服务,它返回一个简单的列表 @Path("/hello") public class Hello { @GET @Produces(MediaType.APPLICATION_JSON) public List<Medication> sayJsonHello() { List<Obj
@Path("/hello")
public class Hello {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Medication> sayJsonHello() {
List<Object1> objs = new ArrayList<Object1>();
objs.add(new Object1("1", "HUHU"));
objs.add(new Object1("2", "HUHU 2"));
return objs;
}
}
我正在将webservice部署到Tomcat7实例中。现在,我想将这些数据输入我的Web应用程序。在阅读了一些教程和示例之后,我开始创建一些实现
在开始创建我的第一个服务后,我将此代码剪切到我的app.js中:
app.config(['$httpProvider', function ($httpProvider) {
delete $httpProvider.defaults.headers.common["X-Requested-With"];
}]);
这将从标头defauls中删除带有请求标头的X-Request-With
1。通过服务和ngResource请求
angular.module('helloService', ['ngResource']).
factory('hService', function ($resource) {
return $resource('http://localhost\\:8180/rest/hello',
{callback: 'JSON_CALLBACK'}, {
get: {method: 'GET', headers: [
{'Content-Type': 'application/json'},
{'Accept': 'application/json'}
]}
});
});
MyController:
function MyController($scope, hService) {
hService.get(function(result){
alert(" Result of helloService");
}, function error(response){
alert(" Error during helloService "+response.status);
});
}
function MyRestangularCtr($scope, Restangular){
var all = Restangular.all('hello');
$scope.allObjects = all.getList();
all.getList().then(function (hellos) {
console.log("Result "+ hellos);
}, function errorCallback(response) {
alert("Oops error from server :( status" + response.status);
console.log("status: "+response);
});
}
如果尝试加载数据,“获取”函数将始终返回错误,并且状态始终为0
2。尝试使用Restangular
了解如何使用Restanglar后,我开始配置Restanglar:
app.config(function (RestangularProvider) {
RestangularProvider.setBaseUrl('http://localhost\\:8180/rest');
});
并将RestangularProvider添加到my angular.module:
var app = angular.module("html5App", ['helloService', 'restangular', 'ngResource']);
MyController:
function MyController($scope, hService) {
hService.get(function(result){
alert(" Result of helloService");
}, function error(response){
alert(" Error during helloService "+response.status);
});
}
function MyRestangularCtr($scope, Restangular){
var all = Restangular.all('hello');
$scope.allObjects = all.getList();
all.getList().then(function (hellos) {
console.log("Result "+ hellos);
}, function errorCallback(response) {
alert("Oops error from server :( status" + response.status);
console.log("status: "+response);
});
}
此处相同:无数据,状态为0。我不知道,为什么我不能从我的服务中获得任何数据。另外,我有时会遇到这样的错误:“错误:$摘要已在进行中”。我不确定问题出在哪里。如果jersey服务错误或不好,或者我的初学者JavaScript错误
第一种解决方案
客户端
angular.module('helloService', ['ngResource']).
factory('hService', function ($resource) {
return $resource('http://localhost\\:8180/rest/hello',
{callback: 'JSON_CALLBACK'}, {
get: {method: 'GET', headers: [
{'Content-Type': 'application/json'},
{'Accept': 'application/json'}
]}
});
});
角度请求应如下所示:
$scope.myData = $resource('http://localhost\\:8180/rest/:action',
{action: 'hello', callback:'JSON_CALLBACK'},
{get: {method: 'JSONP'}});
$scope.datas = $scope.myData.get();
该方法需要JSONP(GET仍将不起作用(因为CORPS没有repsonse数据?)
服务方
angular.module('helloService', ['ngResource']).
factory('hService', function ($resource) {
return $resource('http://localhost\\:8180/rest/hello',
{callback: 'JSON_CALLBACK'}, {
get: {method: 'GET', headers: [
{'Content-Type': 'application/json'},
{'Accept': 'application/json'}
]}
});
});
这里很重要的一点是,服务器还使用JSONPFOMAT进行响应,并可以处理回调请求
@GET
@Produces("application/x-javascript")
public JSONWithPadding sayJsonHello(@QueryParam("callback") String callback) {
MyObjectList obList= new MyObjectList ();
obList.getObjs().add(new MyObject(1, "HUHU"));
obList.getObjs().add(new MyObject(2, "HUHU 2"));
return new JSONWithPadding(obList, callback);
}
还不清楚
有没有办法将正常的json对象从服务器返回到客户端?控制器的第一个参数不应该是$scope?也许这就是问题所在
function MyController($scope, hService) {
不幸的是,没有,相同的行为。有任何限制,我需要作为方法“JSONP”使用吗或者方法:“GET”对从RESTfull服务请求JSON数据也有效吗?什么是
\\\\\:8180
,控制台/网络怎么说?可能它与CORS有关。localhost\\\:8180是错误的为什么?$resource模块剥离端口:8888 from url Restangular:Restangular在内部使用$resource。$resource要求端口转义为非因此,使用端口设置baseUrl的正确方法如下:RestangularProvider.setBaseUrl(“\\:8080”);否则,请求将发送到我的tomcat服务器,而不是发送到我的tomcat服务器。关于:8180不应该是CORS问题,因为它是否是同一个域?不知道这是否仍然相关,但您是否尝试禁用web安全性