contentType:' application / json'使用POST方法(JavaScript)

时间:2014-03-20 11:13:01

标签: javascript jquery ajax web-services http-headers

我需要用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库以使客户端更容易,可能会导致我的问题

2 个答案:

答案 0 :(得分:1)

您需要像编写的那样设置contentType标题; contentType用于请求本身,而dataType标头用于您希望从服务器返回的响应。因此,如果您将contentType添加到$.ajax请求,则看起来是正确的。

" OPTIONS"请求是一个不同的问题:由于您必须制作一个"跨越来源"请求,这意味着ajax请求的服务地址(http://MyWebServiceAddress)与当前页面"起源"不同。地址。是这样的吗?例如,如果您的网页来自http://example.com,并且您正在从该网页向http://twitter.com发出请求。您可以阅读有关跨源或CORS请求here的更多信息。最重要的是,$.ajax必须在发布您正在执行的JSON数据之前发出单独的ORIGIN请求,然后它将发出POST请求 - 当且仅当 http://MyWebServiceAddress处的服务器配置为允许来自您网页域的CORS请求。有关更多详细信息,请参阅上面的CORS链接。

答案 1 :(得分:0)

跨域请求受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请求。