Angularjs 角度资源POST方法变为选项

Angularjs 角度资源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:'

我正试图用$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:'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配置导致出现问题。非常感谢你的想法