原来代码如下,报图一的错误:
function cpuTest() {
$.ajax({
url: "http://127.0.0.1:1010/ICC_tsi_api_multi",
type: 'post',
dataType: "json",
contentType: 'application/json;charset=utf-8',
data:JSON.stringify(formData),
success: function (msgback) {
console.log(msgback)
},
error: function (XMLHttpRequest, status) {
$.showMessage('连接读卡器失败,请检查读卡器驱动是否正常安装', 'error');
}
});
}
图一
如上图一,虽然请求返回200,但是没有数据返回,而且请求方式为:Request Method:OPTIONS,并不是post请求方式.为什么会出现这种方式,原来是错误的头信息导致: contentType: 'application/json;charset=utf-8'
将上面的代码改一下就可以:
function cpuTest() {
$.ajax({
url: "http://127.0.0.1:1010/ICC_tsi_api_multi",
type: 'post',
dataType: "json",
data:JSON.stringify(formData),
success: function (msgback) {
console.log(msgback)
},
error: function (XMLHttpRequest, status) {
}
});
}
以下代码可以解决跨域问题:
package com.vanke.plat.utils;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class SimpleCORSFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse)response;
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
res.setHeader("Access-Control-Max-Age", "3600");
res.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}