2016-03-22 1 views
1

Как вы, ребята, знаете, Angular недавно устарел от функций http.get.success,error. Поэтому такого рода звонки не рекомендуется в контроллере больше:

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

Скорее всего, этот вид вызовов, которые будут использоваться:

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

Проблема, простые модели Spring REST не работают с этот новый код. Недавно я скачал пример код с выше старой функцией успеха и моделью REST, как это:

@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"} для $http.get() вызова, но она ничего не получает - вид пустой.

Как решить эту проблему?

+0

Вы можете получить его с помощью браузера? –

+0

Да, я могу: '{" id ":" f77e3886-976b-4f38-b84d-ae4d322759d4 "," content ":" Hello World "}' – cst1992

+0

Работает ли он с 'success()' вместо then()? –

ответ

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; 
    }); 
5

Первый (из четырех) аргумент, переданный в success(), представляет собой данные (то есть тело) ответа.

Но первый (и единственный) аргумент, переданный then(), - это не данные. Это полный HTTP-ответ, содержащий данные, заголовки, статус, конфигурацию.

Так что вы на самом деле нужно

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

Я попробую это и посмотрю. – cst1992

+0

Работает с 'response.data'. – cst1992

-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; 
}) 

} 

Здесь работает скрипку ->https://jsfiddle.net/o16kg9p4/7/

+0

ответ не имеет отношения к вопросу. OP просит об обработке http-запросов –

+0

Я просто хочу показать новую традицию, что он мог бы сделать это с успехом, но он попросил нас работать по-другому. im пытается помочь ему и вам не нравится, так грустно. – nolines

+0

Просто потому, что вы можете написать что-то, это не значит, что он должен быть написан. Отсрочки бесполезны в указанном случае –

Смежные вопросы