2014-01-25 32 views
14

官方文檔中描述的$ http.jsonp方法似乎總是執行get請求:http://docs.angularjs.org/api/ng。$ http#methods_jsonp。如何在angular中創建JSONP POST請求?

我已經試過了配置選項設置爲「POST」,但它仍然發送GET:

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

我也試圖在希望的角度將切換到崗位設置數據參數:

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

但它仍然沒有:)

至於製作後是這樣的:

$http.post('/api/new?callback=JSON_CALLBACK') 

它確實讓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的重點)。

谷歌在這個問題上最無助,通過角度的來源閱讀並不是最簡單的任務。那麼,我怎樣才能使角度JSONP POST請求?

回答

29

你不能讓使用JSON-P(有或沒有角)

甲JSON-P請求的工作原理是與src屬性生成<script>元件的POST請求。這將始終觸發GET請求。


如果你想用JavaScript跨域POST請求,那麼您必須使用的XMLHttpRequest(和在服務器供應合適的接入控制頭按the CORS specification)或代理通過服務器的請求代管網頁。

+2

該死的,當然!謝謝你,只要我被允許就接受。 – djfm

+1

那只是我猜想的故事的一半,.. IMO可以一起使用POST和JSON-P。但是,正如您已經注意到,通過跨域進行時可能無法正常工作。但同一個域? (無論如何角度似乎並不支持它本地) –

+0

@OleK - 不,那是整個故事。再看第一句。使用JSONP進行POST請求是不可能的。答案的第二段解釋了這是爲什麼。 – Quentin