2012-07-07 90 views
4

我正在使用閉包庫來執行簡單的POST。我認爲XhrIo應該可以工作,因爲當我使用任何其他休息客戶端(例如Firefox瀏覽器應用程序RESTClient或Chrome的簡單休息客戶端)時,我的計算機可以向服務器發送POST請求,而內容類型是application/json。更改內容類型時,HTTP方法從POST更改爲選項

但是從我的申請我無法發表帖子。 我使用下面的代碼

xhr = new goog.net.XhrIo; 
xhr.send('http://myhost:8181/customer/add','POST', goog.json.serialize(data)); 

如果我離開的頭默認情況下,我得到這個

Encoding: UTF-8 
Http-Method: POST 
Content-Type: application/x-www-form-urlencoded;charset=UTF-8 

如果我試圖通過傳遞{'content-type':'application/json'}作爲第四個參數更改標題,標題更改爲

Http-Method:選項
內容類型:

不應該能夠使用Closure庫正確地更改標題,就像RESTClient使用JQuery對XMLHttpRequest所做的一樣?

還有別的方法可以標題進行修改,以使它看起來像這樣

Encoding: UTF-8 
Http-Method: POST 
Content-Type: application/json;charset=UTF-8 

感謝所有幫助 埃迪

回答

8

當你添加一個頭一個XHR對象,大多數瀏覽器執行預檢請求,這是您看到的OPTIONS方法。不幸的是,如果您添加自定義標頭,則無法繞過此方法。 POST將在OPTIONS之後發送。

This article解釋OPTIONS請求一下。 I ran與前期的問題一起回來,如果這是任何幫助。

如果您對OPTIONS請求有特定問題,您應該編輯您的問題以包含它們;否則,這是預期的行爲。

+0

感謝Achal,這是有用的信息。只是想知道RESTClient(http://code.google.com/p/restclient/source/browse/extension/chrome/content/restclient.js)如何設法做到這一點?是否因爲他們傳遞了這個passwordObject:null? – Eddie 2012-07-07 21:17:31

+0

老實說,我不太清楚。你有什麼問題? 「OPTIONS」請求被拒絕了嗎?如果是這樣,你收到什麼HTTP代碼? – 2012-07-08 22:38:07

+0

@AchalDave當POST自動轉換爲OPTIONS時,內容長度即將到達0 – 1Mayur 2012-10-08 12:35:02

1

FWIW煤礦也未能及時更新的類型,當我指定...

{'content-type':'application/json'} 

但是,如果我糾正的情況下

{'Content-Type':'application/json'} 

...它的工作。

去圖。

0

如果你是通過Content-Typeauthorization要求它會轉換POST方法OPTIONS方法,這樣當我們在使用ouath並通過授權令牌那個時候不要求Content-Type

所以不及格Content-Type所有authorization要求就不是你的方法POST更改爲OPTIONS