如何从AngularJS POST请求中检索标识值

时间:2016-10-24 22:33:55

标签: angularjs asp.net-web-api

我的Web API中有以下方法

public IHttpActionResult PostNewOrder(myClass.Order ord1)
{
  if (!ModelState.IsValid)
  {
      return BadRequest(ModelState);
  }
  using (MyContext ctx = new MyContext())
  {

      ctx.Orders.Add(ord1);
      ctx.SaveChanges();

      return CreatedAtRoute("DefaultApi", new { id = ord1.OrderID }, ord1);

  }
}

我从AngularJS调用API如下:

function CreateOrder(url, inData) {
        $http.post(url, inData)
       .success(function (data, status, header) {
           $scope.result = data;
           console.log("Order ID is " + $scope.result.OrderID);
       })
       .error(function (data, status, header) {
           $scope.result = "Data: " + data +
               "<hr />status: " + status;
           console.log(header.responseText);
       });
    }

上面记录了正确的订单ID,但我如何从函数外部检索该ID?函数调用后?

CreateOrder('http://server/AppName/api/PostNewOrder', ord1);

在函数内使用return $scope.result.OrderID不起作用

我也尝试按如下方式调用该函数:

$scope.NewOrderID =CreateOrder('http://server/AppName/api/PostNewOrder', ord1);

同时添加返回我的功能

function CreateOrder(url, inData) {
        $http.post(url, inData)
       .success(function (data, status, header) {
           $scope.result = data;
           console.log("Order ID is " + $scope.result.OrderID);
           return $scope.result.OrderID;
       })
       .error(function (data, status, header) {
           $scope.result = "Data: " + data +
               "<hr />status: " + status;
           console.log(header.responseText);
       });
    }

$scope.NewOrderID未定义

1 个答案:

答案 0 :(得分:0)

使用.then代替.success并返回一个promise。如果您仍想使用.success,请使用延迟API并返回承诺。然后在调用代码中,使用.then。

  

服务

        app.service('OrderService', function ($http, $q) {

            return {
              CreateOrder: CreateOrder
            };

            function CreateOrder(url, inData) {

            var deferred = $q.defer();

            $http.get(url, inData)
               .success(function (data, status, header) {

               deferred.resolve({
                 OrderID:  data.id
               });


               })
               .error(function (data, status, header) {
               deferred.reject(msg);
               });

               return deferred.promise;

            }
        });
  

在控制器中        OrderService.CreateOrder(&#39; order.json&#39;,null).then(function(id){           的console.log(ID);       });

有关如何做出此决定,请参阅thisthis。但一般的判决不是在服务内部使用.success,而是在使用.then。再次由你决定。只是.success是由AngularJS实现的。

My Working plnkr - http://plnkr.co/edit/uCx1PiliTDPT3hYh5YXI?p=preview