Angularjs 角度资源POST方法变为选项
我正试图用$resource向API服务器发出请求。 我想制作一个post,但angular将post方法转换为选项,并给出如下错误 选项http://l ocalhost/API.DWS/API/v1/user/login XMLHttpRequest无法加载http://localhost/API.DWS/API/v1/user/login。飞行前的响应具有无效的HTTP状态代码405Angularjs 角度资源POST方法变为选项,angularjs,api,Angularjs,Api,我正试图用$resource向API服务器发出请求。 我想制作一个post,但angular将post方法转换为选项,并给出如下错误 选项http://l ocalhost/API.DWS/API/v1/user/login XMLHttpRequest无法加载http://localhost/API.DWS/API/v1/user/login。飞行前的响应具有无效的HTTP状态代码405 var objectMethods={ get:{method:'get'}, 更新:{method:'
var objectMethods={
get:{method:'get'},
更新:{method:'PUT'},
创建:{method:'POST'},
删除:{method:'DELETE'},
修补程序:{method:'patch'}
};
var apirl=”http://localhost/API.DWS";
angular.module('nurby.version.services',[])
.config(函数($httpProvider){
})
.factory('LoginService',['$resource','$http',function($resource,$http){
返回$resource(apirl+“/api/v1/user/login”,{},objectMethods);
}])
.controller('LogInController'、['$scope'、'$rootScope'、'$location'、'LoginService'、'http',函数($scope、$rootScope、$location、LoginService、$http){
$scope.login=函数(模型){
var loginObject={用户名:model.Username,密码:model.Password};
$http.defaults.useXDomain=true;
$http.defaults.headers['Content-Type']='application/json';
$http.defaults.headers['Access-Control-Allow-Origin']='*';
创建({},loginObject,函数(数据){
如果(数据){
努力取得成功(“itworks”);
}
否则{
toastr.错误(“不工作”)
}
})
}
}]);代码>您可以定义service.js并使用它,如下所示:
var APP_NAME = 'app';
angular.module(APP_NAME).service('WebService', ["$http", function ($http) {
this.login = function (parameters,callbackFunc)
{
$http({
url: 'api/login',
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: $.param(parameters)
}).success(function (data) {
callbackFunc(data);
}).error(function (data) {
callbackFunc([]);
});
};
LoginController = ['$scope', '$http', '$location', 'WebService','$window', function ($scope, $http, $location,$WebService,$window) {
$scope.login = function(admin){
var data = {email:admin.email,password:admin.password};
$WebService.login(data,function(result){
if(result.success){
$window.location.replace("index");
}
else{
$scope.loginError = result.fail;
}
});
}
并在控制器中使用它,如下所示:
var APP_NAME = 'app';
angular.module(APP_NAME).service('WebService', ["$http", function ($http) {
this.login = function (parameters,callbackFunc)
{
$http({
url: 'api/login',
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: $.param(parameters)
}).success(function (data) {
callbackFunc(data);
}).error(function (data) {
callbackFunc([]);
});
};
LoginController = ['$scope', '$http', '$location', 'WebService','$window', function ($scope, $http, $location,$WebService,$window) {
$scope.login = function(admin){
var data = {email:admin.email,password:admin.password};
$WebService.login(data,function(result){
if(result.success){
$window.location.replace("index");
}
else{
$scope.loginError = result.fail;
}
});
}
}]) 这里的问题是,您正在指定一个以“”开头的完整URL,并且您没有从同一域加载网页(可能您使用了不同的端口?)
这意味着浏览器将您的请求视为跨域请求。因此,它首先发送一个选项请求,询问服务器是否允许您发送帖子。您可以将服务器配置为正确响应这些请求,或者更改代码,使网页和api位于同一域中
如何配置服务器将取决于正在运行的服务器。搜索CORS和您的web服务器,您应该会找到有用的信息。在我的控制器中,这对我很有用
var resource = $resource(
"your_api_url",
{
callback: "JSON_CALLBACK"
},
{
getData: {
method: "JSONP",
isArray: false
}
}
);
function loadRemoteData() {
$scope.isLoading = true;
resource.getData().$promise.then(
function( friends ) {
$scope.isLoading = false;
},
function( error ) {
// If something goes wrong with a JSONP request in AngularJS,
// the status code is always reported as a "0". As such, it's
// a bit of black-box, programmatically speaking.
alert( "Something went wrong!" );
}
);
}
$scope.searchResources = function() {
$scope.isLoading = true;
resource.getData().$promise.then(
function( friends ) {
$scope.isLoading = false;
},
function( error ) {
// If something goes wrong with a JSONP request in AngularJS,
// the status code is always reported as a "0". As such, it's
// a bit of black-box, programmatically speaking.
alert( "Something went wrong!" );
}
);
};
共享一些代码,这样我就可以告诉您哪里做错了。您是否尝试将方法作为JSONP?它可以工作,但我想使用$resource而不是$http。其他想法?我想你可以在这里找到答案:我的代码工作了。iis配置导致出现问题。非常感谢你的想法