1

我在我的MVC控制器的以下操作:角度獲取數據

[HttpPost] 
public JsonResult Save(TestModel model) 
{ 
    var newId = _myService.CreateItem(model); 
    return Json(newId); 
} 

這將運行並返回一個ID,我看到它在提琴手返回例如因爲它不42.但是我的角碼沒有獲得數字,但返回的值顯示爲數據:b,其中包含一個承諾。有沒有辦法獲得成功方法的數據中返回的號碼?我的角度代碼如下:

vm.save = function() { 
TestRepository.save(vm.MyData).$promise.then(
    function (data) { 
     // Here data is returned as data : b, not the number 
    }, 
    function() { 
     alert('An error occurred while creating this record.'); 
    }); 
} 

我的服務就是

function TestRepository($resource) { 
return { 
    save: function (item) { 
     return $resource('/mysite/setup/Save').save(item); 
    } 
} 

該服務能夠調用Action,因爲我看到的代碼打我的斷點,我可以看到NEWID也設置爲42,但我從來沒有看到它回到了有角度的一面。

+0

你能發佈的console.log的'(數據)的結果;' – Hackerman

+0

@Hackerman打印出B {$承諾:d,$解決:真正} 如果我返回的是一個對象而不是數字,那麼數據包含對象,也許這個數字不會以JSON形式返回,因爲Fiddler顯示響應僅爲42,而不是JSON格式。 – Paritosh

回答

3

$resource doesn't support primitive response

由於$resource通常用於與RESTful服務連接起來,做很好地形成物體發送數據,這是所有API怎麼做。從原始類型的API發送數據阻止人們使用不良模式。理想情況下,它應該只返回JSON對象。

[HttpPost] 
public JsonResult Save(TestModel model) 
{ 
    var newId = _myService.CreateItem(model); 
    return Json(new {Id = newId}); 
} 

代碼

vm.save = function() { 
    TestRepository.save(vm.MyData).$promise.then(
     function (data) { 
      console.log(data.Id) 
     }, 
     function() { 
      alert('An error occurred while creating this record.'); 
     } 
    ); 
}