2013-07-29 4 views
11

JSON에 대해 $ http.get을 실행 중이고 상태가 0입니다. 동일한 JSON을 다운로드했으며 get은 로컬로 작동하고 Python에서는 요청을 사용하여 작동합니다. 라이브러리 JSON을 아무 문제없이 얻을 수 있지만 AngularJS에서는 작동하지 않습니다. 내가 이해하지 못하는 것은 왜 각이 그것을 얻지 못하고 있지만 다른 것은 무엇인지입니다. 아래 코드 스 니펫.AngularJS의 HTTP 상태 0

function AgentListCtrl($scope, $http) { 
    $http.get('http://foo.bar/api/objects').success(function(data) { 
    $scope.objects = data; 
}).error(function(data, status) { 
    $scope.status1 = status; 
}); 

이는 JSON을 제공하고 로컬 파일을 사용할 때의 구문을 분석하지만, 그렇지 않은 경우는 실패하고 세트는 오류가 발생하면 코드에서 0

답변

2

에, 상태 할당에만 발생 상태 1.

success(function(data, status, headers, config) { 
    $scope.objects = data; 
    $scope.status1 = status; 
}).error(function(data, status) { 
    $scope.status1 = status; 
}); 
+0

하지만 로컬에서 똑같은 json을 얻었을 때 서버에서 가져올 때 실제로 오류가 발생하고 실제로 콘텐츠를 가져 오지 않습니다. 나는 상태 0 코드가 내가 생각한 것만 큼 중요하지 않다고 생각한다. 정말로 json을 얻지 못했다. –

+1

서버에서 당겨 요? 다른 도메인에서 호스팅되는 API를 호출하지 않았는지 확인하십시오. javascript는 기본적으로 상호 도메인 API 호출을 허용하지 않기 때문에 – zsong

+0

정확히 무슨 일이 일어나는지 들립니다. 고맙습니다. 내가 서버에 밀어 넣기 전까지는 로컬 파일로 작업 할 것입니다. –

20

그냥, 나 같은, 몇 가지를 직접 (하지만 주석) 위의 대답에 명시되지 않기 때문에이 명확하게하고 : 당신은 호출이 다음과 같이 성공적으로 만들어진 상태를 얻을 수 있어야합니다 각도 초보자는 이것에 약간의 시간을 보낼 수 있습니다

  • 각도의 $ 자원이 차례로 (A status 200으로) 제대로 응답하는, 다른 서버의 REST 동사를 실행할 수 있습니다. 그럼에도 불구하고 Angular는 상태 0으로 식별 할 수있는 암호 메시지로 실패합니다. 브라우저의 디버거에서 실제로 서버의 응답을 볼 수 있기 때문에 오도 된 것입니다.

  • 는 각도가 반대로 명시되지 않는 한 (적어도 기본 query() 방법) 크로스 도메인 요청에 OPTIONS 요청을 할 것입니다. 일반적으로 서버는 원하는 콘텐츠 (즉, 귀하의 표현)로 대답하지 않습니다. 요청 당이 작업을 수행하는 간단한 방법 중 하나는 메서드를 'GET'으로 지정하는 것입니다. 위해 CORS [1]에 의해 지정된 헤더를 포함해야합니다 REST 요청에 응답

    $resource('http://yourserver/yourentity/:id', {}, {query: {method: 'GET'}); 
    
  • 서버가 제대로 응답을 소비하는 각도 허용합니다. 본질적으로 이것은 응답에 Access-Control-Allow-Origin 헤더를 포함하고 요청이 오는 곳에서 서버를 지정하는 것을 의미합니다. 이 값은 * 일 수 있습니다.

스프링 데이터 나머지-webmvc에 누군가 통합 AngularJS와이 대답을 보완 :

HATEOAS의 JSON 형식의 응답은 제대로 대신 오류 Expected response to contain an array but got an object을 생산, 각도에 의해 소비되지 않습니다
  • . 이 문제는 $resouce의 구성에 isArray: false 매개 변수를 추가하여 해결할 수 있습니다.

  • 스프링 데이터 받침대-webmvc 시나리오 구성 CORS 매우 투 - 포인트 예 [2] (참조 SimpleCORSFilter)

[1] https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

에서 제시

[2] https://spring.io/guides/gs/rest-service-cors/

+3

Angular는 OPTIONS/preflight 요청 자체를 작성하지 않습니다. 브라우저가 않습니다. 실제로 Angular는이 요청에 대해 알지 못하고 클라이언트 측 코드에 완전히 투명합니다. –

+0

@ ray-nicholus 흥미 롭습니다. 이것에 대한 모든 참고 자료를 가리킬 수 있습니까? – h7r

+0

이것은 CORS의 기본 개념입니다. CORS에 관해서는 [CORS spec (http://www.w3.org/TR/cors/) 또는 [this MDN article] (https://developer.mozilla.org/en- US/docs/HTTP/Access_control_CORS) –

1

나는 이와 비슷한 문제가 발생했습니다. Angle의 $ http.get() 메소드를 통해 호출 할 때 다른 모든 수단을 통해 JSON을 반환하는 제 3 자 API가 상태 0으로 실패했습니다.

제 경우에는 CORS 문제가 없었습니다. 대신 API에 사용했던 URL이 올바르지 않아서 서버가 301 응답을 발행했습니다. Angular가 리디렉션을 존중하지 않았습니다.

현명한 말입니다.