在Angularjs $ http.post中向webapi发出问题

时间:2013-11-12 08:39:29

标签: angularjs

我正在以下网站上阅读angularjs $ http.post 快捷方式 http://docs.angularjs.org/api/ng。$ HTTP#methods_post

它接受以下3个参数。

post(url, data, config)

目前我遇到了如何从我的视图传递数据的问题。 这是我的视图代码,要求用户输入ID和ContactNumber。

<div data-ng-controller="postreq">
    <form>
    RequestID:<input type="text" data-ng-model="request.Id"/>
    ContactNo:<input type="text" data-ng-model="request.newcontact"/>
    <button data-ng-click="add()">Add</button>

    </form>
</div>

这是我在Angularjs控制器中尝试的内容并且无法正常工作..不知道如何获取request.Id和request.newcontact的输入值。

function postreq($scope, $http) {

    $scope.add = function ()
    {
     $http.post(
    '/api/request',
    JSON.stringify(**?????? here i am confused how to pass data**),
    {
        headers: {
            'Content-Type': 'application/json'
        }
    }
).success(function (data) {
    $scope.request= data;
});

}

3 个答案:

答案 0 :(得分:3)

以下是如何使用Angular执行$ http帖子的基本示例:

 $http({
    cache: false,
    url: "/api/request",
    method: "POST",
    data: {email: "my_login_email@example.com", password: "123456"}
  }).
  success(function (data) ->
    // here the "data" parameter has your response data
  ).
  error(function () ->
    // if you are here something is not going so good
  )

另请注意,Angular不会像普通表单那样POST数据(这非常重要,具体取决于您的后端系统,例如在PHP中您赢得了无法使用$ _POST) 。为了做到这一点,你需要做更多的工作:

// your module
myModule = angular.module("myModule ", []);
// you module config
myModule.config (["$httpProvider", function($httpProvider) {
   $httpProvider.defaults.transformRequest = function (data) {
       if data == undefined {
         return data
       }
       return $.param(data)
   }
   $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"
}])

还要注意$ .param是jQuery。如果你不使用jquery,你可以找到其他方法。

答案 1 :(得分:1)

$http在内部做了一些事情,因此我们作为应用程序开发人员不必考虑它们。

  1. 如果内容需要JSON.stringify
  2. 添加适当的标题
  3. 允许在请求之前/之后拦截
  4. 处理缓存的回复(与您的问题无关,但很有用)
  5. 因此,这意味着在使用$http时,我们不需要明确地执行这些操作。您可以将代码更改为:

    $http.post('/api/request', $scope.request);
    

    这将实现您的问题所需的一切。顺便说一句,这将返回promise successerror回调方法。这些可用于处理响应。

答案 2 :(得分:0)

您可以使用以下语法:

$http.post(
'/api/request',
$scope.request,
{
    headers: {
        'Content-Type': 'application/json'
    }
});