【问题标题】:How to pass parameters to $http in angularjs?如何在angularjs中将参数传递给$http?
【发布时间】:2013-09-25 10:41:23
【问题描述】:

假设我有两个输入框,对应的 ng-model 分别为 fname 和 lname。如果我将 http 请求称为:

$http({method:'GET', url:'/search', params:{fname: fname, lname: lname}})

它会调用 url 吗:

/search?fname=fname&lname=lname

我在后端(python)遇到的错误是:

cannot concatenate str and nontype objects.

这些参数不是作为字符串发送的吗?如果没有,如何解决这个问题?

【问题讨论】:

    标签: http angularjs params


    【解决方案1】:

    我们可以在 HTML 文件中使用输入数据作为参数传递 w 使用 ng-model 绑定输入字段的值。

    <input type="text" placeholder="Enter your Email" ng-model="email" required>
    
    <input type="text" placeholder="Enter your password " ng-model="password" required> 
    

    并且在 js 文件中使用 $scope 来访问这些数据:

    $scope.email="";
    $scope.password="";
    

    控制器功能将是这样的:

     var app = angular.module('myApp', []);
    
        app.controller('assignController', function($scope, $http) {
          $scope.email="";
          $scope.password="";
    
          $http({
            method: "POST",
            url: "http://localhost:3000/users/sign_in",
            params: {email: $scope.email, password: $scope.password}
    
          }).then(function mySuccess(response) {
              // a string, or an object, carrying the response from the server.
              $scope.myRes = response.data;
              $scope.statuscode = response.status;
    
            }, function myError(response) {
              $scope.myRes = response.statusText;
          });
        });
    

    【讨论】:

      【解决方案2】:

      构建 URL '/search' 作为字符串。喜欢

      "/search?fname="+fname"+"&lname="+lname
      

      其实我没用过

       `$http({method:'GET', url:'/search', params:{fname: fname, lname: lname}})` 
      

      但我确定“参数”应该是 JSON.stringify 就像 POST 一样

      var jsonData = JSON.stringify(
          {
              fname: fname,
              lname: lname 
          }
      );
      

      之后:

      $http({
        method:'GET',
        url:'/search',
        params: jsonData
      });
      

      【讨论】:

        【解决方案3】:

        这是你的做法:

        $http.get("/url/to/resource/", {params:{"param1": val1, "param2": val2}})
            .then(function (response) { /* */ })...
        

        Angular takes care of encoding the parameters.

        Maxim Shoustin 的回答不起作用({method:'GET', url:'/search', jsonData} 不是有效的 JavaScript 文字),JeyTheva 的回答虽然简单,但很危险,因为它允许 XSS(不安全的值在连接时不会被转义)。

        【讨论】:

        • 我们是否将值放入 .then
        • @stevek,你将一个函数传递给then 子句;该函数接受单个参数,即响应本身。
        • 对我来说,它需要“参数”字段包装数据,例如:$http.get("/url/to/resource/", { params: { parameters: {"param1": val1, "param2 ": val2} } }).then(function (response) { /* */ })
        • 对于 PUT 和 POST 你需要使用另一个方法签名stackoverflow.com/questions/31572937/…
        【解决方案4】:

        这是一个从路由提供者传递值的简单数学

        //Route Provider
        $routeProvider.when("/page/:val1/:val2/:val3",{controller:pageCTRL, templateUrl: 'pages.html'});
        
        
        //Controller
        $http.get( 'page.php?val1='+$routeParams.val1 +'&val2='+$routeParams.val2 +'&val3='+$routeParams.val3 , { cache: true})
                .then(function(res){
                    //....
                })
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-16
          • 2017-08-12
          • 1970-01-01
          • 2013-04-28
          • 2013-09-06
          • 2012-11-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多