2013-07-01 44 views
2

我正在使用jQuery 1.10.1。我想发送内容类型设置为application/json的POST请求。我做了以下内容:jQuery不发送内容类型为application/json的发布请求

$.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,状态= 0,状态文本=”错误“}

生成OPTIONS请求,但是没有POST。这里是选项的要求和回应:

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设置我想要的内容类型标题?

+0

什么是过滤器?浏览器控制台 –

+1

中的任何东西都只是一个JSON内容,它简直就是{} –

+0

此链接也可以帮助您:http://stackoverflow.com/questions/5596341/jquery-ajax-post-does-not-send-数据到Web服务器 – kmas

回答

1

访问控制起源的东西。

设置Content-Type JavaScript中的标题不被浏览器允许。该解决方案是修改响应标头(在Java示例):

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

它不JQUERY特异性的,但是它适用于每一个AJAX请求以及(道场或普通的JavaScript)。

-1

尝试了这一点


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) 
     } 
    })