2014-01-25 5 views
14

공식 문서에 설명 된 $ http.jsonp 메서드는 항상 get 요청을 수행하는 것 같습니다 : http://docs.angularjs.org/api/ng. $ http # methods_jsonp.각도로 JSONP POST 요청을 만드는 방법은 무엇입니까?

나는 'POST'로 설정 옵션을 설정 시도했지만 그것은 여전히 ​​GET 전송 : 나는 또한 각도는 POST로 전환 할 것이라는 희망에서 데이터 인수를 설정 시도

$http.jsonp('/api/new?callback=JSON_CALLBACK', {method: 'POST'}); 

을 :

$http.jsonp('/api/new?callback=JSON_CALLBACK', {data: {stuff: true}}); 

하지만 여전히 같은 게시물 만들기위한

을 :)하지 않습니다

을 2,955,는

그것은 분명 POST을 수행하지만 JSON_CALLBACK와 각도 마법 꼬추를하지 않는 다음과 같은 JS 오류가 발생 :

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxx.yyy.zzz' is therefore not allowed access. 

(이 API는 응용 프로그램과 동일한 서버에없는, 즉이다 JSONP의 요점).

Google은이 문제에 가장 도움이되지 않았으며 각도 소스를 통해 읽는 것이 가장 쉬운 작업이 아닙니다. 그렇다면 각도로 JSONP POST 요청을 만들려면 어떻게해야합니까?

답변

29

당신은

JSON-P 요청은 src 속성을 가진 <script> 생성 요소에 의해 작동 (또는 각도)없이 JSON-P를 사용하여 POST 요청을 할 수 없다. 이렇게하면 항상 GET 요청이 트리거됩니다.


당신은 다음 XMLHttpRequest의 하나를 사용 (서버 공급에 적합한 액세스 제어 the CORS specification에 따라 헤더가) 또는 프록시 페이지를 호스팅하는 서버를 통해 요청을해야한다 자바 스크립트와 도메인 간 POST 요청을 확인하려면 .

+2

젠장, 물론! 고맙다. 내가 허락하자마자이를 받아 들인다. – djfm

+1

이 이야기의 절반 밖에되지 않습니다. IMO는 POST와 JSON-P를 함께 사용하는 것이 가능합니다. 그러나 이미 알고 있듯이 교차 도메인을 통해 작업 할 때 작동하지 않을 수 있습니다. 하지만 같은 도메인?! (어쨌든 각도는 로컬로 지원하지 않는 것 같습니다) –

+0

@OleK - 아니, 그게 전부입니다. 맨 처음 문장을 다시보십시오. JSONP를 사용하여 POST 요청을하는 것은 불가능합니다. 대답의 두 번째 단락은 왜 그런지 설명합니다. – Quentin

관련 문제