contentType: 'application/json' 使用 POST 方法 (JavaScript)
Posted
技术标签:
【中文标题】contentType: \'application/json\' 使用 POST 方法 (JavaScript)【英文标题】:contentType: 'application/json' with POST method (JavaScript)contentType: 'application/json' 使用 POST 方法 (JavaScript) 【发布时间】:2014-04-27 04:35:54 【问题描述】:我需要在 javascript 中创建一个 Web 服务器客户端,但在定义请求标头时遇到了一些问题。
我需要 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: '应用程序/json; charset=utf-8',
然后使用 Chrome 开发工具查看请求,我可以看到该方法已更改为“OPTIONS”并键入“text/plain”
有人可以帮助我吗?我不必使用 Ajax,所以如果有人知道一个好的 JavaScript 库来使客户端更容易,也许会导致我的问题
【问题讨论】:
看这里***.com/questions/12132760/… 【参考方案1】:跨域请求以same origin policy 为准。
他们require permission from the server到:
从响应中读取数据 首先提出某种请求您已经触发了后一种情况,因此浏览器正在使用 OPTIONS 动词生成 preflight request。
服务器需要响应 CORS 标头授予权限。
类似:
Access-Control-Allow-Origin: http://your.server.example.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Content-Type
…应该做的工作(未经测试)。
浏览器收到响应后,会发出 POST 请求。
【讨论】:
【参考方案2】:您确实需要像您所写的那样设置contentType
标头; contentType
用于请求本身,而dataType
标头用于您期望从服务器返回的响应。因此,如果您将 contentType
添加到 $.ajax
请求中,它看起来是正确的。
“OPTIONS”请求是一个不同的问题:发送该请求是因为您必须发出“跨域”请求,这意味着 ajax 请求的服务地址 (http://MyWebServiceAddress
) 与当前页面的“源”地址不同.是这样吗?例如,如果您的页面来自http://example.com
,并且您正在从该页面向http://twitter.com
发出请求。您可以阅读有关跨域或 CORS 请求的更多信息 here。底线是$.ajax
必须像您一样在发布 JSON 数据之前发出单独的 ORIGIN 请求,然后它才会发出 POST 请求——当且仅当服务器位于 @ 987654331@ 配置为允许来自页面域的 CORS 请求。有关详细信息,请参阅上面的 CORS 链接。
【讨论】:
以上是关于contentType: 'application/json' 使用 POST 方法 (JavaScript)的主要内容,如果未能解决你的问题,请参考以下文章
ContentType 不起作用,mime=application/octet-stream
添加 contentType: "application/json" 出错
Ajax跨域之ContentType为application/json请求失败的问题