2012-07-07 87 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