如何使用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(同源策略),但是谁在乎呢?