AngularJs,如何发送 $http 的参数 [重复]

Posted

技术标签:

【中文标题】AngularJs,如何发送 $http 的参数 [重复]【英文标题】:AngularJs, how send params for $http get [duplicate] 【发布时间】:2018-01-28 23:49:31 【问题描述】:

我正在尝试通过 url 将标识符的值传递给快速路由器,我要传递的变量是 IDR,我从 $routeParams.IDR 正确获取它,现在我必须通过 $http 传递它,但我做不到。

那是我的 controller.js ($routeParams.IDR 很好用)

app.controller("rutaDestinosCtrl", function($scope, $http, userService, $routeParams)      

        vm = this;          
        vm.destinos = [];
        var requestData = 
            'IDR': $routeParams.IDR //$routeParams.IDR is for example: 5
        ;


        vm.funciones = 

            obtenerDestinos : function()                
            $http(
                 method: "GET",
                 url: '/privadas/rutas/obtenerDestinosRuta',
                 requestData,  
                 headers: 'auth-token': userService.token
            )
                 .then(function(respuesta)
                    vm.destinos = respuesta.data.data;                                      
                , function(respuesta)
                    console.log("Error:", respuesta.status);
                )   

             //obtenerDestinos

        //funciones  

        vm.funciones.obtenerDestinos();
);

通过令牌过滤器并正确到达该方法后:

router.get('/obtenerDestinosRuta', function(req,res)

    var query = "SELECT * FROM public.\"Destino\" D " +
            " JOIN public.\"RutaDestino\" RD ON D.\"IDD\" = RD.\"IDD\"" +
            " WHERE \"IDR\" = " + req.body.IDR+ " ORDER BY D.\"IDD\" ASC";

    console.log(query);

    db.query(query).spread(function(result, metadata)
        res.json(
            data: result
        )
    ).catch(function(err)
        res.status(500).send("Error: "+ err);
    )

);

我无法获得存储在 RequestData 中的值(应该是 5),我尝试了几种方法都没有结果,在控制台中“req.body.IDR”未定义,如果我更改“req.body .IDR”在声明中的值为 5,效果很好,知道如何做到这一点吗?

这是 console.log 的查询结果:

SELECT * FROM public."Destino" D JOIN public."RutaDestino" RD ON D."IDD" = RD."IDD" WHERE "IDR" = undefined ORDER BY D."IDD" ASC

问候。

【问题讨论】:

我的路线和你的答案一样,效果很好,问题是其他的 在我的控制器上,我的 IDR 很好 你在使用路由提供者吗?还是国家提供者? RouteProvider,但效果很好 【参考方案1】:

你能把你的路线定义也放上去吗?

在您的路由定义中,您必须指定预期的参数,如下所示:

module.config(['$routeProvider', function($routeProvider) 
    $routeProvider.
     when('/routeName/:IDR', templateUrl: 'template.html', controller: myCtrl)
]);

注意路线中的“:IDR”值。

然后在您的控制器中,您可以使用 $routeParams.IDR 访问它

【讨论】:

将 console.log(JSON.stringify(req)) 放在 var query='...' 指令之前。只是为了检查它是否真的被定义为 req.body.IDR 而不是 req.IDR【参考方案2】:

谢谢大家,终于找到其他有同样问题的帖子了:angular.http params

但是,在简历中,Angular.http 提供了一个通过 $http 发送参数的选项,称为“参数”。如果您必须使用“GET”方法,那就太好了。在我的情况下,使用后,工作完美。这是我的代码:

在 controller.js 上,我使用了 paramsconfig

app.controller("rutaDestinosCtrl", function($scope, $http, userService, $routeParams)      
    console.log("Controlador rutaDestinosCtrl");        
        vm = this; 

        vm.destinos = [];

        vm.funciones = 

            obtenerDestinos : function()                
                var data = 
                    IDR: $routeParams.IDR
                ;

                var config = 
                     params: data,
                     headers : 'auth-token': userService.token
                ;

                 $http.get('/privadas/rutas/obtenerDestinosRuta', config)
                 .then(function(respuesta)
                    //Acciones cuando sea una respuesta correcta
                    vm.destinos = respuesta.data.data;                                      
                , function(respuesta)
                    //Acciones cuando sea una respuesta erronea
                    console.log("Error:", respuesta.status);
                )   

             //obtenerDestinos

        //funciones  

        vm.funciones.obtenerDestinos();
);

为了获得 IDR 的值,我使用了 req.query.IDR

router.get('/obtenerDestinosRuta', function(req,res)

    console.log(req.query.IDR);

    var query = "SELECT * FROM public.\"Destino\" D " +
            " JOIN public.\"RutaDestino\" RD ON D.\"IDD\" = RD.\"IDD\"" +
            " WHERE \"IDR\" = " + req.query.IDR + " ORDER BY D.\"IDD\" ASC";

    console.log(query);

    db.query(query).spread(function(result, metadata)
        res.json(
            data: result
        )
    ).catch(function(err)
        res.status(500).send("Error: "+ err);
    )

);

【讨论】:

如已建议的那样称为“参数”或 $routeParams?

以上是关于AngularJs,如何发送 $http 的参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS - $http.post 发送请求参数而不是 JSON 的任何方式?

AngularJS - 如何在所有请求上发送通用 URL 参数?

如何使用 angularjs $http.delete() 请求发送数据?

后端接收不到AngularJs中$http.post发送的数据的问题

如何使用 _csrf 在 angularjs 中发送 POST 请求?

Django + Angular:如何将 angularjs $http 数据或参数发送到 django 并在 django 中解释?