Примечание Многие люди публикуют комментарии как ответы, но ни один из них не ответил на вопрос, заданный этим OP. Поэтому, пожалуйста, не считайте, что это ответили. Я отвечу на комментарии. Если пользователь делает комментарии, которые приводят к ответу, я буду ждать, пока этот пользователь опубликует ответ на основе их утвержденных комментариев, а затем я пометю этот ответ как принятый и +1. Таким образом, нет стимула спама пула ответов с догадками.Как я могу использовать AJAX JSON-ответ в AngularJS?
An AngularJS приложение должно получить объект JSON из службы REST вызывается из Спринг загрузки задней части. Как изменить приведенный ниже код, чтобы можно было проанализировать ответ в свойствах возвращаемого объекта JSON? Например, я хочу извлечь firstname
, lastname
и другие свойства объекта JSON после его возврата.
Вот контроллер AngularJS, который вызывает службу REST:
angular.module('confirm', []).controller('confirm', function($scope, $http, $routeParams) {
// set the default value
$scope.confirmStatus = "blank";
$scope.$on('$viewContentLoaded', function() {
var str1 = "/confirm-email?d=";
var str2 = $routeParams.d;
var res = str1.concat(str2);
var fnm3 = "nothing";
$http.post(res).then(function(response) {
fnm3 = response.data.firstname;//this line halts the program
//replacing with following line doesn't work.
//$scope.weblead = response.data;
});
$scope.confirmStatus = "success";
document.write(fnm3);
});
});
А вот метод Spring загрузки, который обеспечивает ответ JSON:
@RequestMapping(value = "/confirm-email", method = RequestMethod.POST)
public @ResponseBody WebLead confirmEmail(HttpSession session, @RequestParam(value="d") String dval) {
WebLead dummy = new WebLead();dummy.setFirstname("justAtest");
try{
System.out.println("The Server Heard The registration form Request!");
System.out.println("dval is: "+dval);
String sid = session.getId();
System.out.println("session id is: "+sid);
try{
List<WebLead> wleads = myrepo.findBySessionid(dval);
if(wleads.size()>0){//replace with better handling later
System.out.println("wleads.size is > 0 !");
wleads.get(0).setEmailConfirmed("true");
myrepo.save(wleads.get(0));
return myrepo.findBySessionid(dval).get(0);
}
return dummy;
} catch(Exception e){return dummy;}
} catch(Exception e){return dummy;}
}
ПРИМЕЧАНИЕ: Мы знаем, что пост был обработан на сервере, поскольку журналы терминалов, начиная с SYSO в обработчике /confirm-email
, являются:
The Server Heard The registration form Request!
dval is: a1b2c3
session id is: E1F844262F254E9B0525504723DBA490
2016-01-07 12:11:49.773 DEBUG 7288 --- [nio-9000-exec-9] w.c.HttpSessionSecurityContextRepository : SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.
2016-01-07 12:11:49.774 DEBUG 7288 --- [nio-9000-exec-9] tRepository$SaveToSessionResponseWrapper : Skip invoking on
2016-01-07 12:11:49.774 DEBUG 7288 --- [nio-9000-exec-9] tRepository$SaveToSessionResponseWrapper : Skip invoking on
2016-01-07 12:11:49.774 DEBUG 7288 --- [nio-9000-exec-9] o.s.s.w.a.ExceptionTranslationFilter : Chain processed normally
2016-01-07 12:11:49.774 DEBUG 7288 --- [nio-9000-exec-9] s.s.w.c.SecurityContextPersistenceFilter : SecurityContextHolder now cleared, as request processing completed
, что является JSON вернулся из веб-службы? – Dan
@ Dan Я не уверен, потому что 'console.log (response)' ничего не возвращал. Программа зависает до точки останова в этой строке, но все же журналы терминала показывают, что был вызван метод на стороне сервера. – CodeMed
(Pro-tip: мета-комментарий обычно не подходит для вопросов здесь. Вопросы, которые не имеют принятого ответа, считаются неудовлетворительными по умолчанию. Если вы хотите уточнить вопрос, то, во всяком случае, (a) добавьте разъяснение в конце своего сообщения, объяснив возникшие недоразумения, (б) постарайтесь не предполагать, что читатели догадались или были распущены спам - большинство людей просто пытаются быть полезными, (c) воздерживаться от комментариев о голосовании - это не интересует большинство читателей, которые даже не подписываются). – halfer