2014-05-09 2 views
1

저는 angularJS 및 SLIM PHP 안정적인 서버를 사용하고 있습니다. PHP 서비스가 작동하고 실제로 $ http.get()를 이미이 응용 프로그램에서 문제없이 사용했습니다 ... 하지만 지금은 이상한 일이 일어나고, 나는 다른 사람들과 같은 방식으로 새로운 기능을 만들었고 아무런 문제없이 .success (function (data))를 얻었습니다. 실제로 console.log (data)를 사용할 수 있고 올바른 결과를 보여줍니다. 하지만 .success()가 끝나고 돌아 오면, 정의되지 않은 결과를 얻는다. ps : 브라우저 콘솔에 오류가 없습니다. 성공 내부

var markerOptions = []; 
    loadMarkers(); 
    console.log(markerOptions); 

    function loadMarkers() { 
    $http.get('http://localhost/rest/getMarkers').success(function(response){ 
      console.log(response); 
      markerOptions = response; 
    }); 
} 
  • 을 console.log()() MarcKline의 의견이 올바른지 @ 정의되지 않은
+3

'$ http.get'은 (는) 비동기식이므로 동기 코드가 발생하는 곳에서는 그 결과를 즉시 사용할 수 없습니다. 이것이'console.log'가'success' 밖에서 비어있는 이유입니다. –

+0

참조 : http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call –

+3

자세히 알아보기, 이것은 매우 일반적인 고통의 포장의 두통이 가치가있다 너의 머리를 한 번에. –

답변

4

을 반환) (loadMarkers 오른쪽 데이터를

  • 을 console.log() 반환합니다. 어쨌든, 내가 작성한 코드에 따라 Ajax 응답의 반환 된 데이터를 범위 변수 (예 : $ scope를 사용하는 것으로 가정)에 할당 할 수 있습니다 (예 : $scope.markerOptions = response). var $scope.markOptions = []으로 범위 변수로 markOptions을 선언 할 수 있습니다 (물론 ... console.log($scope.markOptions)에 따라 기록하십시오). 또한 $scope.loadMarkers = function() {...}을 정의하고 $scope.loadMarkers()

    으로 호출하십시오. 클라이언트 측에서 Ajax 응답을 받자 마자 범위가 업데이트됩니다. javasciprt의 비동기 접근법을 더 잘 이해할 수있을뿐 아니라 현재의 요구 사항을 지원하여 희망 사항에 대한 설명이 가능하다는 희망을 갖기를 바랍니다.

  • +0

    나는 그것을 시도하고 작동하지 않는다. 나는 사용하려고 시도한다.() too ... 그러나 여전히 작동하지 않는다. ( – Felipe

    +2

    $ scope.loadMarkers = function() {...}에 의해 scopeMarger를 범위 함수로 정의한다. '$ scope.loadMarkers() '로 호출하십시오. – Kludge

    +0

    nop .. 여전히 작동하지 않습니다. – Felipe

    관련 문제