contentType:’application / json’和POST方法(JavaScript)
我需要用JavaScript创建一个Web服务器客户端,我在定义Request头时遇到了一些问题。
我需要POST方法和Content-Type:“application / json”。
我试过这个:
$.ajax({ url: 'http://MyWebServiceAddress', data: JSON.stringify({user:'user',pass:'pass'}), type: 'POST', crossDomain: true, dataType: 'json', success: function () { alert("success") }, error: function (xhr, ajaxOptions, thrownError) { alert("Error: " + xhr.status + "\n" + "Message: " + xhr.statusText + "\n" + "Response: " + xhr.responseText + "\n" + thrownError); } });
但是如果我把contentType这样:
contentType:’application / json; 字符集= UTF-8′ ,
然后使用Chrome开发工具查看请求我可以看到该方法已更改为“OPTIONS”并键入“text / plain”
有人可以帮帮我吗? 我不必使用Ajax,所以如果有人知道一个好的JavaScript库来使客户端更容易,可能会导致我的问题
您需要像编写时一样设置contentType
标头; contentType
用于请求本身,而dataType
标头用于您期望从服务器返回的响应。 因此,如果将该contentType
添加到$.ajax
请求,它看起来是正确的。
“OPTIONS”请求是一个不同的问题:因为您必须发出“跨域”请求而发送,这意味着ajax请求的服务地址( http://MyWebServiceAddress
)与当前页面的“origin”地址不同。 是这样的吗? 例如,如果您的页面来自http://example.com
,并且您正在从该页面向http://twitter.com
发出请求。 您可以在此处阅读有关跨源或CORS请求的更多信息 。 底线是$.ajax
必须在发布JSON数据之前发出单独的ORIGIN请求,然后它会发出POST请求 – 当且仅当 http://MyWebServiceAddress
的服务器配置为允许来自您网页域的CORS请求。 有关详细信息,请参阅上面的CORS链接。
跨域请求受原始策略的约束。
他们需要服务器的许可才能:
- 从响应中读取数据
- 首先提出某种要求
您已触发后一个条件,因此浏览器正在使用OPTIONS动词发出预检请求 。
服务器需要使用授予权限的CORS头进行响应。
就像是:
Access-Control-Allow-Origin: http://your.server.example.com Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: Content-Type
……应该做的工作(未经测试)。
当浏览器获得响应时,它将发出POST请求。