40

假设我有两个输入框,对应的 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.

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

4

4 回答 4

74

这是您的操作方法:

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

Angular 负责对参数进行编码

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

于 2014-07-01T21:03:25.790 回答
15

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

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

其实我没用

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

但我敢肯定“参数”应该JSON.stringifyPOST

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

后:

$http({
  method:'GET',
  url:'/search',
  params: jsonData
});
于 2013-09-20T06:29:58.993 回答
2

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

//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){
            //....
        })
于 2013-09-20T06:41:29.820 回答
0

我们可以使用输入数据在 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 文件中 w 使用 $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;
      });
    });
于 2017-06-18T14:19:23.303 回答