2016-08-12 5 views
0

Я использую simpleCORSFilter.java для обработки запроса CORS, который отлично работает для другого запроса, но каким-то образом он не работает для запроса AJAX POST.Ajax не принимает ответ CORS (предполетный)

simpleCORSFilter.java

@Component 
public class SimpleCORSFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
      throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 

     response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Origin,X-Requested-With,X-Requested-by, Content-Type, Accept,Session"); 
     response.setHeader("Access-Control-Expose-Headers", "Location"); 
     chain.doFilter(req, res); 
    } 

запрос Ajax

$.ajax({ 
     url: url, 
     dataType: 'json', 
     type: 'POST', 
     contentType: 'application/json; charset=UTF-8', 
     crossDomain: true, 
     data: JSON.stringify(data), 
     success: function (data) { 
        console.log(' data : '+data); 

       }, 
     error: function(jqXHR, textStatus, errorThrown) { 
        console.log('jqXHR:'); 
        console.log(jqXHR); 
        console.log('textStatus:'); 
        console.log(textStatus); 
        console.log('errorThrown:'); 
        console.log(errorThrown); 
       } 
      }); 

После отправки предполетной ответ он просто перестает работать (не завершение работы сервера, но это как раз висит там без какого-либо ответа) , и если я попытаюсь запросить что-нибудь еще, он разорвет соединение и ответит после

Caused by: java.io.IOException: An established connection was aborted by the software in your host machine 

Server Log:

---------------------------- 
ID: 1 
Address: http://localhost:9092/services/searchCMS/ 
Encoding: UTF-8 
Http-Method: OPTIONS 
Content-Type: 
Headers: {Accept=[*/*], accept-encoding=[gzip, deflate, sdch], accept-language=[en-US,en;q=0.8], access-control-request-headers=[content-type], access-control-request-method=[POST], connection=[keep-alive], Content-Type=[null], dnt=[1], host=[localhost:9092], origin=[http://localhost:3000], referer=[http://localhost:3000/report], user-agent=[Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36]} 
-------------------------------------- 
2016-08-12 09:50:48.912 INFO 6408 --- [nio-9092-exec-1] o.a.c.interceptor.LoggingOutInterceptor : Outbound Message 
--------------------------- 
ID: 1 
Response-Code: 200 
Content-Type: text/xml 
Headers: {Allow=[POST, GET, PUT, OPTIONS, HEAD], Date=[Fri, 12 Aug 2016 07:50:48 GMT], Content-Length=[0]} 
-------------------------------------- 

Я не понимаю, где именно проблема, Ajax часть или веб-службы часть? Я прочитал так много блогов и ответов stackoverflow, но я не смог решить эту проблему. Он просто просто вызывает ошибку после получения предполетного ответа от веб-службы. Я не знаю почему? может быть, я что-то упускаю, о чем вы можете указать специалистам.

ответ

0

Я звонил по этому запросу Ajax нажатием кнопки, но я забыл вернуться на это событие click. Я нашел решения here

раствор 1: вы можете вернуться ложным по щелчку функции()

return false ; // for onClick funciton 

раствор 2: вы можете предотвратить использование по умолчанию

e.preventDefault();  // e is the onclick event parameter