我的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
未定义
答案 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); });
有关如何做出此决定,请参阅this和this。但一般的判决不是在服务内部使用.success,而是在使用.then。再次由你决定。只是.success是由AngularJS实现的。
My Working plnkr - http://plnkr.co/edit/uCx1PiliTDPT3hYh5YXI?p=preview: