【问题标题】:jQuery doesn't send post request with content type application/jsonjQuery 不发送内容类型为 application/json 的 post 请求
【发布时间】:2013-06-28 10:20:42
【问题描述】:

我正在使用 jQuery 1.10.1。我想发送内容类型设置为 application/json 的 POST 请求。我正在执行以下操作:

    $.ajax({
        type: "post",
        url: urlBase + "user/search",
        contentType: "application/json; charset=utf-8", 
        data: JSON.stringify(filter), 
        success: renderResponse,
        error: function(error) {
            console.log(error)
        }
    })

但是 POST 没有发送,我在错误回调中得到以下响应:

对象 { readyState=0, status=0, statusText="error"}

生成了 OPTIONS 请求,但没有 POST 跟随。以下是 OPTIONS 请求和响应:

Antwort-Header
Access-Control-Allow-Head...    X-Requested-With
Access-Control-Allow-Meth...    GET, POST, OPTIONS
Access-Control-Allow-Orig...    *
Access-Control-Max-Age  86400
Allow   GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Content-Length  0
Server  Jetty(6.1.1)

Anfrage-Header
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Access-Control-Request-He...    content-type
Access-Control-Request-Me...    POST
Cache-Control   no-cache
Connection  keep-alive
Host    localhost:8080
Origin  http://localhost
Pragma  no-cache
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0

这里有什么问题?如何让 jQuery 设置我想要的内容类型标题?

【问题讨论】:

  • 什么是过滤器?还有浏览器控制台中的任何内容
  • 过滤器只是一个 JSON 内容,它只是 {}
  • 这个链接也可以帮到你:stackoverflow.com/questions/5596341/…
  • 在rails服务器中设置的content_type比Ajax设置的优先级高。

标签: javascript jquery ajax http-headers cross-domain


【解决方案1】:

访问控制起源的东西。

浏览器不允许在 JavaScript 中设置 Content-Type 标头。解决办法是修改响应头(Java中的例子):

    HttpServletResponse hresp = (HttpServletResponse) resp;
    hresp.addHeader("Access-Control-Allow-Origin", "*");
    hresp.addHeader("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");

它不是特定于 jquery 的,但它也适用于每个 AJAX 请求(Dojo 或纯 javascript)。

【讨论】:

    【解决方案2】:

    试试这个


    var postData = JSON.stringify({"key": value});//this will be your json content
    
    $.ajax({
            type: "post",
            url: urlBase + "user/search",
            contentType: "application/json; charset=utf-8", 
            data: postData,
    dataType: "json," 
            success: renderResponse,
            error: function(error) {
                console.log(error)
            }
        })
    

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 2019-08-01
      • 2012-12-16
      • 2018-03-22
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多