ajax请求传中文字符给后台,返回乱码

首先第一种方式,我前端编码,但是后端又说他不配合解码,所以这个办法不能解决。

    api.ewAjax = function(url, method, params, callback) {
    method = method.toUpperCase() === 'GET' ? method : "POST";
    //  IE7+, Firefox, Chrome, Opera, Safari(XMLHttpRequest) 
    //  IE6, IE5(ActiveXObject)
    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    // GET or POST 请求
    if (method.toUpperCase() === 'GET') {
        url = params ? url + '?' + params : url;
        xhr.open(method, url);
        xhr.send();
    } else {
        if (params) {
            if (typeof params === 'string' && params.indexOf('=') !== -1) {
                xhr.open(method, url);
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
                xhr.send(params);
            } else {
                xhr.open(method, url);
                xhr.send(params)
            }
        } else {
            xhr.open(method, url);
            xhr.send()
        }
    }
    if (typeof callback === 'function') {
        xhr.onreadystatechange = function(e) {
            if (xhr.readyState === 4 && xhr.status === 200) {
                callback(JSON.parse(xhr.responseText));
            }
        }
        xhr.onerror = function() {
            callback(this.status);
        }
    }
    // the chaining method 
    this.then = function(fn) {
        xhr.onreadystatechange = function(e) {
            if (xhr.readyState === 4 && xhr.status === 200) {
                fn.call(this, JSON.parse(xhr.responseText));
            }
        }
        xhr.onerror = function() {
            fn.call(this, this.status);
        }
    }
    return this;
};

我用原生ajax封装的。
图片描述

后台用的tomcat服务器,我要晕死了。到底是我前端的错还是后端的问题啊。

阅读 1.3k
评论
    4 个回答

    后端不配合,那这个问题就无解了!你编码了,他不解码肯定乱码啊!
    这个如果不是为了加密,直接传中文后端也是能够获得的,存数据库也没问题的。

      这个封装的肯定有问题。为什么post还要把参数拼到url里?

        中文以URL形式传只能是编码解决
        既然是POST了,肯定是放在数据包里传啊,常见的前后交互就是以json格式传,就不会有中文编码的问题
        话说前后分离连对接形式都不说好还做什么前后分离?

          中文乱码好弄吧,要么配置文件统一弄,要么在字符那里统一设置。

            撰写回答

            登录后参与交流、获取后续更新提醒

            相似问题
            推荐文章