如何使用jQuery指定contentType的jsonp POST请求?

我需要用内容types“application / json”做一个jsonp POST请求。 我可以像这样获得POST请求到服务器:

jQuery.ajax({ type: 'POST', url: url, data: data, success: success, error: error, async: true, complete: complete, timeout: TIMEOUT, scriptCharset: 'UTF-8', dataType: 'jsonp', jsonp: '_jsonp', }); 

但是,只要我添加行: contentType: "application/json"它开始发送它作为一个OPTIONS请求,而不是一个POST。

我如何指定内容types,并仍然提交请求作为POST?

这是不可能的JSONP POST请求。

JSONP通过创build一个执行来自不同域的Javascript的<script>标签来工作; 使用<script>标签发送POST请求是不可能的。

dataType使用json并发送像这​​样:

  $.ajax({ url: "your url which return json", type: "POST", crossDomain: true, data: data, dataType: "json", success:function(result){ alert(JSON.stringify(result)); }, error:function(xhr,status,error){ alert(status); } }); 

并把这些行放在你的服务器端文件中:

如果PHP

 header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST'); header('Access-Control-Max-Age: 1000'); 

如果java:

 response.addHeader( "Access-Control-Allow-Origin", "*" ); response.addHeader( "Access-Control-Allow-Methods", "POST" ); response.addHeader( "Access-Control-Max-Age", "1000" ); 

有一个(黑客)解决scheme,我已经做了很多次,你将能够张贴JsonP。 (您可以发布表单,比GET可以使用的大2000字符)

客户端应用的Javascript

 $.ajax({ type: "POST", // you request will be a post request data: postData, // javascript object with all my params url: COMAPIURL, // my backoffice comunication api url dataType: "jsonp", // datatype can be json or jsonp success: function(result){ console.dir(result); } }); 

JAVA:

 response.addHeader( "Access-Control-Allow-Origin", "*" ); // open your api to any client response.addHeader( "Access-Control-Allow-Methods", "POST" ); // a allow post response.addHeader( "Access-Control-Max-Age", "1000" ); // time from request to response before timeout 

PHP:

 header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST'); header('Access-Control-Max-Age: 1000'); 

这样做,你打开你的服务器的任何职位请求,你应该通过提供身份证或其他东西重新安全。

有了这个方法,你也可以把请求types从jsonp改为json,都可以工作,只需设置正确的响应内容types

JSONP

 response.setContentType( "text/javascript; charset=utf-8" ); 

JSON

 response.setContentType( "application/json; charset=utf-8" ); 

请不要认为你的服务器不会再尊重SOP(同源策略),但是谁在乎呢?