Javascript 访问控制允许origin在POST请求中不使用ajax
我的标题“Access control allow origin”有问题,我使用下一个代码发出请求:Javascript 访问控制允许origin在POST请求中不使用ajax,javascript,java,ajax,cors,cross-domain,Javascript,Java,Ajax,Cors,Cross Domain,我的标题“Access control allow origin”有问题,我使用下一个代码发出请求: <script type='text/javascript'> function save() { $.ajax( { type: 'POST', url: "...", contentType: 'application/json', data:
<script type='text/javascript'>
function save() {
$.ajax(
{
type: 'POST',
url: "...",
contentType: 'application/json',
data: '{"cuspp":"228061JGLIR5", "userWeb":"46689"}',
success: function (data) {
console.log("It Works");
console.log (data);
if (data.codigo==0){
console.log(data.mensaje);
}else{
console.log(data.mensaje);
}
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("error");
}
});
}
</script>
我用java开发了一个客户端,运行良好。我真的不知道为什么使用Ajax不起作用,但这表明web服务工作正常,问题出在客户端
你好
另外,在代码中,我没有放置URL,因为我不允许发布两个以上的URL,但它们与错误消息中显示的URL相同。这应该让您了解CORS的基本概念
简而言之,当域www.example1.com*上的客户端试图访问www.example2.com上托管的api时,会发生CORS错误。您得到的CORS错误是浏览器的安全标志
所以你可以用两种方法来解决它
/api
到www.example2.com。因此,请求来自客户端->www.example1.com/api/post\u url->www.example2.com/post\u url在您的服务中实现ContainerResponseFilter。这会解决你的问题
public class Filter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request,
ContainerResponse response) {
response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
response.getHttpHeaders().add("Access-Control-Allow-Headers",
"origin, content-type, accept, authorization, X-Request-With");
response.getHttpHeaders().add("Access-Control-Allow-Credentials",
"true");
response.getHttpHeaders().add("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, HEAD");
return response;
}
}
我找到的解决方案是使用以下代码创建一个实现ContainerResponseFilter接口(com.sun.jersey.spi.container)的新类:
@Provider
public class SummerResponseFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response)
{
//INICIO OT 10533 - PSC001
String ruta = request.getPath();
if(ruta.contains("pcnct020")){
response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
response.getHttpHeaders().add("Access-Control-Allow-Methods","GET, OPTIONS,
HEAD, PUT, POST");
response.getHttpHeaders().add("Access-Control-Allow-Headers","Content-Type");
}
//FIN OT 10533 - PSC001
if (Logger.isDebugEnabled()) {
Logger.debug("Finaliza el proceso de la url [%s] %s", request.getMethod(),
request.getRequestUri().toString());
}
if (Logger.isTraceEnabled()) {
Logger.trace("Response - Headers = [ %s ]",
response.getHttpHeaders().toString());
Logger.trace("Response - Status = [ %d ]", response.getStatus());
}
Answer.clean();
return response;
}
}
然后以这种方式在xml中定义:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>filter.SummerResponseFilter</param-value>
</init-param>
com.sun.jersey.spi.container.ContainerResponseFilters
过滤器。夏季响应过滤器
有了这个解决方案,我可以解决我的问题。我希望能帮助任何有同样问题的人
谢谢您的回答。您似乎需要为端点检查启用CORS。谢谢,但我没有使用Spring Framework。谢谢您的回复。我尝试了第一种解决办法,但没有成功。从我所读到的,这个错误是普遍的,并不一定表明真正的问题。关于第二个解决方案,我不能使用其他服务器,该项目是在WebSphereServer中实现的。
@Provider
public class SummerResponseFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response)
{
//INICIO OT 10533 - PSC001
String ruta = request.getPath();
if(ruta.contains("pcnct020")){
response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
response.getHttpHeaders().add("Access-Control-Allow-Methods","GET, OPTIONS,
HEAD, PUT, POST");
response.getHttpHeaders().add("Access-Control-Allow-Headers","Content-Type");
}
//FIN OT 10533 - PSC001
if (Logger.isDebugEnabled()) {
Logger.debug("Finaliza el proceso de la url [%s] %s", request.getMethod(),
request.getRequestUri().toString());
}
if (Logger.isTraceEnabled()) {
Logger.trace("Response - Headers = [ %s ]",
response.getHttpHeaders().toString());
Logger.trace("Response - Status = [ %d ]", response.getStatus());
}
Answer.clean();
return response;
}
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>filter.SummerResponseFilter</param-value>
</init-param>