2016-06-15 3 views
0

Я пытаюсь получить JSON из api с XMLHttpRequest внутри фабрики, но он заканчивается возвратом undefined, даже несмотря на то, что вход в него предполагает, что он должен работать нормально.фабрика Cordova/AngularJS GET JSON XMLHttpRequest

Вот мой завод код

.factory('MyService', function(){ 
return { 
    getJSON: function(path){ 
     var xhr = new XMLHttpRequest(); 
     xhr.open("Get", path, true); 
     xhr.onreadystatechange = function(){ 
     if(xhr.readyState === 4){ 
      if(xhr.status === 200){ 
      console.log(JSON.parse(xhr.responseText)); // Displays a correct JSON object 
      return JSON.parse(xhr.responseText); // Returns said object 
      }else{ 
      return xhr; 
      } 
     } 
     }; 
     xhr.send(); 
     } 
    } 
}) 

Здесь я называю обслуживание от моего контроллера

$scope.test = MyService.getJSON("api url"); // Ends up as undefined 

console.log внутри заводских триггеров и отображает JSON правильно, как когда-либо $ сфера. тест заканчивается тем, что он не определен, хотя мы возвращаем тот же JSON в $ scope.test

Если кто-нибудь не знает, почему это не работает, это было бы здорово, чем k вы

ответ

0

мая, а также ответить на этот вопрос, как она была решена еще полгода назад, проблема заключалась в том, что завод не возвращают обещал, что после того, как он был заключен в обещание с использованием $ q, он начал работать по назначению.

0

Это из-за вызова перекрестного домена, который вы делаете. Либо включите звонок перекрестного происхождения, либо выполните обычное http-обещание! Вы должны использовать интернет-браузер в качестве браузера.

Я надеюсь, что это помогает: http://enable-cors.org/

  1. https://docs.angularjs.org/api/ng/service/ $ HTTP
+0

У меня включено перекрестное начало, иначе console.log не смог показать действительный объект JSON, который извлекается из местоположения api. – Kilppari

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