2017-01-10 2 views
0

У меня есть две службы getCountUp и getCountDown. Я хочу получить данные JSON из обеих служб.AngularJS получить данные JSON от более чем одной услуги

Мой код контроллера приведен ниже

(function() { 
    angular 
     .module('app') 
     .controller('VisitorsController', [ 'getHostStatusService', VisitorsController]) 
     .factory("getHostStatusService", ['$http', function($http) { 
      return { 
       getResponders: function(servicesUrl) { 
        return $http.get(servicesUrl).then(function(response) { 
         console.log(response.data); 
         return response.data; 
        }); 
       } 
      }; 
      return getHostStatusService; 
     }]); 

    function VisitorsController(getHostStatusService) { 
     var vm = this; 
     var servicesUrl = app.serviceCallUrl+'getCountUp'; 

     var getCountUp = 0; 
     var getCountDown = 0; 

     console.log(servicesUrl); 
     getHostStatusService.getResponders(servicesUrl).then(function(data) { 
      console.log(data); 
      getCountUp = data; 
     }); 

     var servicesUrl1 = app.serviceCallUrl+'getCountDown'; 
     console.log(servicesUrl1); 
     getHostStatusService.getResponders(servicesUrl1).then(function(data) { 
      console.log(data); 
      getCountDown = data; 
     }); 
    } 
})(); 

В моей консоли я получаю следующее сообщение об ошибке

GET http://localhost:8080/getCountDown 500() 
Possibly unhandled rejection: {"data":"<!DOCTYPE html><html><head><title>Apache Tomcat/8.5.8 - Error report</title><style type=\"text/css\">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style> </head><body><h1>HTTP Status 500 - Request processing failed; nested exception is org.hibernate.TransactionException: Transaction not successfully started</h1><div class=\"line\"></div><p><b>type</b> Exception report</p><p><b>message</b> <u>Request processing failed; nested exception is org.hibernate.TransactionException: Transaction not successfully started</u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b></p><pre>org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.TransactionException: Transaction not successfully started\n\torg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)\n\torg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)\n\tjavax.servlet.http.HttpServlet.service(HttpServlet.java:622)\n\torg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)\n\tjavax.servlet.http.HttpServlet.service(HttpServlet.java:729)\n\torg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\n\tcom.alleviateconsultancy.nms.configuration.CORSFilter.doFilter(CORSFilter.java:25)\n</pre><p><b>root cause</b></p><pre>org.hibernate.TransactionException: Transaction not successfully started\n\torg.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:172)\n\tcom.alleviateconsultancy.nms.dao.NMSDaoImp.getServiceHostCountDown(NMSDaoImp.java:574)\n\tcom.alleviateconsultancy.nms.service.NMSDaoServiceImp.getServiceHostCountDown(NMSDaoServiceImp.java:106)\n\tsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tjava.lang.reflect.Method.invoke(Method.java:498)\n\torg.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)\n\torg.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)\n\torg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)\n\torg.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)\n\torg.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)\n\torg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)\n\torg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)\n\torg.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)\n\tcom.sun.proxy.$Proxy41.getServiceHostCountDown(Unknown Source)\n\tcom.alleviateconsultancy.nms.controller.AppController.getHostCountDown(AppController.java:141)\n\tsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tjava.lang.reflect.Method.invoke(Method.java:498)\n\torg.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)\n\torg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n\torg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111)\n\torg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806)\n\torg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729)\n\torg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)\n\torg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)\n\torg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)\n\torg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)\n\torg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)\n\tjavax.servlet.http.HttpServlet.service(HttpServlet.java:622)\n\torg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)\n\tjavax.servlet.http.HttpServlet.service(HttpServlet.java:729)\n\torg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\n\tcom.alleviateconsultancy.nms.configuration.CORSFilter.doFilter(CORSFilter.java:25)\n</pre><p><b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/8.5.8 logs.</u></p><hr class=\"line\"><h3>Apache Tomcat/8.5.8</h3></body></html>","status":500,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"http://localhost:8080/getCountDown","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":""} 

Но это не работает. Я всегда получаю данные JSON только из одной службы.

+0

Я не вижу ничего плохого здесь ... Почему бы вам не попробовать поставить обратные вызовы ошибок в обещаниях, чтобы увидеть, если возможно там неудачу любой вызов? Или вы можете проверить отладчик сети браузера, чтобы проверить, отправляются ли звонки? – olivarra1

+0

Данные, которые вы получаете, от какого сервиса - Url или Url1? – Subhajit

+0

@Subhajit От servicesUrl. – user3441151

ответ

1

Проблема, похоже, в конце сервера, так как она не может обрабатывать несколько запросов одновременно или что-то (что в целом довольно плохо). Поэтому вам, вероятно, придется справиться с этим.

Скорее всего, вы можете обойти эту проблему, только делает один запрос сервера в то время следующим образом:

function VisitorsController(getHostStatusService) { 
    var vm = this; 
    var servicesUrl = app.serviceCallUrl+'getCountUp'; 
    var servicesUrl1 = app.serviceCallUrl+'getCountDown'; 

    var getCountUp = 0; 
    var getCountDown = 0; 

    getHostStatusService.getResponders(servicesUrl) 
    .then(function(data) { 
     getCountUp = data; 
     return getHostStatusService.getResponders(servicesUrl1) 
    }) 
    .then(function(data) { 
     getCountDown = data; 
    }); 
} 
+0

В этом случае, если я получаю какие-либо исключения из servicesUrl, чем я также не получаю никаких данных из servicesUrl1? – user3441151

+0

@ user3441151 Затем также поместите 'return getHostStatusService.getResponders (servicesUrl1)' в обратный вызов ошибки первого '.then (' – olivarra1

+0

Но возьмите совет @fissio: на сервере происходит что-то действительно неправильное. Вы должны попытаться исправить эту сторону – olivarra1

0

Вы сделали несколько оператор возврата в методе заводской

использовать следующий код, для demo purpose Я использовал Json-файлы.

app.controller('VisitorsController', [ 'getHostStatusService', VisitorsController]); 

    function VisitorsController(getHostStatusService) { 
     var vm = this; 
     var servicesUrl = 'getCountUp.json'; 

     var getCountUp = 0; 
     var getCountDown = 0; 

     console.log(servicesUrl); 
     getHostStatusService.getResponders(servicesUrl).then(function(data) { 
      console.log(data); 
      getCountUp = data; 
     }); 

     var servicesUrl1 = 'getCountDown.json'; 
     console.log(servicesUrl1); 
     getHostStatusService.getResponders(servicesUrl1).then(function(data) { 
      console.log(data); 
      getCountDown = data; 
     }); 
    } 
app.factory("getHostStatusService", ['$http', function($http) { 
      return { 
       getResponders: function(servicesUrl) { 
        return $http.get(servicesUrl).then(function(response) { 
         console.log(response.data); 
         return response.data; 
        }); 
       } 
      }; 
     }]); 

LIVE DEMO

+0

Хотя это запах кода, это действительно не имеет значения. Второе возвращение никогда не будет вызвано. – olivarra1

+0

Я думаю, что вы знаете концепцию фабрики в угловом выражении, которая заставляет оператор возврата, если не просьба ссылаться на него так что второй оператор - принудительное выполнение. – Aravind

+1

С уважением, AngularJS является фреймворком Javascript. Он не меняет способ запуска JS. Если в JS в функции есть 'return 1; return 2;' вы будете всегда get '1' в качестве возвращаемого значения, а оператор' return 2' никогда не будет выполнен. Попробуйте помещать 'console.log' между ними, даже в приложении AngularJS. – olivarra1

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