Ajax请求成功却执行error回调方法(Ajax跨域请求问题)

遇到的问题描述:

Ajax使用post请求添加分组,请求url是RESTful风格。添加成功了已经向数据库写入了信息,但是Ajax却执行了error回调,观察网络发现有两次相同请求一次是get请求,一次是post请求携带了需要向数据库写入的参数。第一次请求成功返回200,第二次却返回404,所以导致回调进入了error。
于是乎查找了很久解决方案,明白了是跨域请求导致,而Ajax只能同源请求。

解决方案:

写一个自定义过滤器

package xyz.guqing.taotao.manage.filter;
 
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
 
/**
 * @ClassName:  CrossFilter   
 * @Description: 跨域请求过滤器 
 * @author: guqing
 * @date:   2019年1月4日 下午5:33:52   
 *
 */
public class CrossFilter implements Filter {
	private static final boolean debug = true;
	private FilterConfig filterConfig = null;
	
	public CrossFilter() {
		super();
	}
 
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
        if (filterConfig != null) {
            if (debug) {                
                log("CrossFilter:Initializing filter");
            }
        }
 
	}
	
	 @Override
    public String toString() {
        if (filterConfig == null) {
            return ("CrossFilter()");
        }
        StringBuffer sb = new StringBuffer("CrossFilter(");
        sb.append(filterConfig);
        sb.append(")");
        return (sb.toString());
    }
 
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		if (debug) {
			log("CrossFilter:doFilter()");
        }
 
         if(response instanceof HttpServletResponse){
        	 HttpServletResponse alteredResponse = ((HttpServletResponse)response);
	        // I need to find a way to make sure this only gets called on 200-300 http responses
	        // TODO: see above comment
        	 addHeadersFor200Response(alteredResponse);
         }
         doBeforeProcessing(request, response);
 
         Throwable problem = null;
         try {
             chain.doFilter(request, response);
         } catch (Throwable t) {
             // If an exception is thrown somewhere down the filter chain,
             // we still want to execute our after processing, 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值