$ http.get不使用then()函数与REST模型一起工作

时间:2016-03-22 08:06:00

标签: angularjs spring rest

众所周知,Angular最近弃用了mysql_query("SELECT * FROM firstform WHERE $id='".$_SESSION["manager_name"]."'"); 函数。因此,不再建议您在控制器中使用此类调用:

http.get.success,error

相反,这种调用将被使用:

$http.get("/myurl").success(function(data){
    myctrl.myobj = data;
}));

问题是,简单的Spring REST模型不能使用这个新代码。我最近下载了一个带有上述旧成功函数的示例代码和一个这样的REST模型:

$http.get("/myurl").then(
    function(data) {
        myctrl.myobj = data;
    },
    function(error) {
        ...
    }

这应该为@RequestMapping("/resource") public Map<String,Object> home() { Map<String,Object> model = new HashMap<String,Object>(); model.put("id", UUID.randomUUID().toString()); model.put("content", "Hello World"); return model; } 调用返回{id:<someid>, content:"Hello World"}之类的地图,但它什么也没有收到 - 视图为空白。

如何解决此问题?

3 个答案:

答案 0 :(得分:5)

传递给success()的第一个(四个)参数是响应的数据(即正文)。

但传递给then()的第一个(也是唯一的)参数不是数据。它是完整的HTTP响应,包含数据,标题,状态和配置。

所以你真正需要的是

$http.get("/myurl").then(
    function(response) {
        myctrl.myobj = response.data;
    },
    function(error) {
        ...
    });

答案 1 :(得分:1)

结果的期望是不同的。它是响应,而不是直接的数据对象。

documentation说:

// Simple GET request example:
$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    // this callback will be called asynchronously
    // when the response is available
  }, function errorCallback(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

回复的属性是

data – {string|Object} – The response body transformed with the transform functions.
status – {number} – HTTP status code of the response.
headers – {function([headerName])} – Header getter function.
config – {Object} – The configuration object that was used to generate the request.
statusText – {string} – HTTP status text of the response.

由于需要数据对象,

请将代码转换为

$http.get("/resource").then(
    function(response) {
        myctrl.myobj = response.data;
    });

答案 2 :(得分:-1)

然后必须返回一个新的承诺,所以你应该推迟处理它。

var myApp = angular.module('myApp', []);

myApp.factory('modelFromFactory', function($q) {
return {

        getModel: function(data) {
      var deferred = $q.defer();
      var items = [];
          items.push({"id":"f77e3886-976b-4f38-b84d-ae4d322759d4","content":"Hello World"});
      deferred.resolve(items);
      return deferred.promise;
  }
};
});

function MyCtrl($scope,  modelFromFactory) {
modelFromFactory.getModel()
    .then(function(data){
        $scope.model = data;
})

}

这是工作小提琴 - &gt;的 https://jsfiddle.net/o16kg9p4/7/