2014-12-30 3 views
0

json API에서 데이터를 가져 오려고하는데, phonegap 앱을 만들기 위해 onsen-ui를 사용하고 있습니다. 나는 그것을 얻기 위해 wordpress plugin을 사용하고 있습니다. 다음은이 작업을 수행하는 방법입니다.json API에서 데이터를 가져올 수 없습니다. Wordpress through AngularJS + Onsen

module.factory('$data', function($http) { 
     var data = {}; 


     $http.get('http://www.foduu.com/api/get_recent_posts'). 
     success(function(data, status, headers, config) { 
     console.log(data.posts); 
     // return data; 
     }). 
     error(function(data, status, headers, config) { 
     console.log("error in fetching data"); 
     }); 
    }); 

하지만 이것은 console.log에 있습니다.

enter image description here

는 HTML에서 난 정말 도움이 될 것입니다 이것에

<ons-list ng-controller="MasterController"> 
     <ons-list-item modifier="chevron" class="item" ng-repeat="item in items" ng-click="showDetail($index)"> 
      <ons-row> 
      <ons-col width="60px"> 
       <div class="item-thum"></div> 
      </ons-col> 
      <ons-col> 
       <header> 
       <span class="item-title">{{item.title}}</span> 
       <span class="item-label">{{item.label}}</span> 
       </header> 
       <p class="item-desc">{{item.desc}}</p> 
      </ons-col> 
      </ons-row>       
     </ons-list-item> 
     </ons-list> 

어떤 제안 유사한 코딩했다.

난 당신이 단지 return 누락 생각하면

+2

$ http.get에 문제가없는 것은 공장이 제대로 구축되지 않았기 때문입니다. 공장은 반환해야합니다. 이 자습서를 확인하십시오 : http://viralpatel.net/blogs/angularjs-service-factory-tutorial/ – lwalden

+0

알겠습니다. 하지만 어떻게해야합니까? 내 웹 사이트에서 데이터를 가져오고 싶습니다. – user3201500

답변

0

감사합니다

module.factory('$data', function($http) { 
     var data = {}; 


     $http.get('http://www.foduu.com/api/get_recent_posts'). 
     success(function(data, status, headers, config) { 
     console.log(data.posts); 
     // return data; 
     }). 
     error(function(data, status, headers, config) { 
     console.log("error in fetching data"); 
     }); 

     return data; 
}); 

보조 노트로서, 나는 당신이 $ 접두어로 자신의 서비스와 공장의 이름을하지 않는 것이 좋습니다. 이것은 에 대한 각도 규정으로 자신이 제공하는 서비스입니다.

또한 현재,이 factory은별로하지 않습니다.

module.factory('$data', function($http) { 
     var data = { 

      getRecentPosts: function() { 
       return $http.get('http://www.foduu.com/api/get_recent_posts'); 
      } 
     }; 

     return data; 
}); 

그런 다음,이 팩토리를 참조하는 컨트롤러의 약속 successerror을 처리 : 당신은 아마 $http.get 반환 당신이 약속을 반환해야합니다.

+0

나는이 오류를 줬지만 시도했다. – user3201500

+0

XMLHttpRequest는 http://www.foduu.com/api/get_recent_posts를로드 할 수 없습니다. 'Access-Control-Allow-Origin'헤더가 요청 된 리소스에 없습니다. 따라서 원본 'null'은 액세스가 허용되지 않습니다. – user3201500

+0

이것은 다른 문제입니다. 이제 CORS 문제에 직면 해 있습니다. –

0

공장 이름은 $로 시작하지 않아야합니다.

$scope.variableName = FactoryName.getProjects() 
     .then(function(data){ 
     $scope.variableName = data; 
     }) 
     .catch(function(err){ 
     $log.error(err); 
     }); 

당신이 컨트롤러에 FactoryName 의존성을 주입해야합니다 : 여기

angular.module('appName') 
    .factory('FactoryName', function ($http, $q) { 

    return { 
     myFunctionName: function (callback) { 
     var cb = callback || angular.noop; 
     var deferred = $q.defer(); 
     $http.get('insertYourURLHere') 
      .success(function (data) { 
      deferred.resolve(data); 
      return cb(); 
      }). 
      error(function (err) { 
      deferred.reject(err); 
      return cb(err); 
      }.bind(this)); 

     return deferred.promise; 
     }, 
     }; 
    }); 

그런 다음 컨트롤러에서이 호출 할 수 있습니다 작동 공장의 예입니다.

+0

컨트롤러에서 성공과 오류를 모두 처리하려고한다면,'$ q.defer()'로 새로운 약속을 만드는 데는 쓸모가 없다. 당신은 지금 바로 전화하고 있습니다. –

+0

나는 그것에 대해 생각하지 않았다. 방금이 일반적인 디자인 패턴을 사용했지만 방금 컨트롤러에서 처리 할 수 ​​있습니다. – bodagetta