zhengqx123456 2011-01-14 17:00
浏览 273
已采纳

AJAX JSON 乱码

网上下了一个JS、功能是把FORM里的内容序列化为JSON、用AJAX方式提交到后台
JS比较小巧
(function ($) {
var formJson = {};
var currentForm = null;

$.fn.form_serialize = function () {
    currentForm = $(this);
    formJson = {};
    var doms = currentForm.find('[name]');
    $.each(doms, function (index, dom) {
        var domName = $(dom).attr('name');
        if (!formJson[domName]) {
            formJson[domName] = { Name: domName, Type: $(dom).attr('type'), Doms: currentForm.find('[name=' + domName + ']') };
        }
    });
    return getResult();
};

var getResult = function () {
    var d = {
        toJson: function () {
            var data = {};
            $.each(formJson, function (key, json) {
                data[key] = getVal(json);
            });
            return data;
        },
    };
    return d.toJson();
}

var getVal = function (json) {
    var methods = {
        getDefaultVal: function (dom) {
            return $(dom).val();
        },
        getSelectVal: function (dom) {
            var val = '';
            var selectType = $(dom).attr('type');
            if (selectType == 'select-multiple') {
                var items = $(dom).val();
                if (items == null) return '';
                for (var i = 0; i < items.length; i++) {
                    val += i == 0 ? items[i] : (',' + items[i]);
                }
                return val;
            } else {
                return $(dom).val();
            }
        },
        getRadioVal: function (dom) {
            return $(dom).attr('checked') ? $(dom).val() : null;
        },
        getCheckBoxVal: function (dom) {
            return methods.getRadioVal(dom);
        }
    };

    var dispacher = function (type, dom) {
        switch (type) {
            case 'text':
            case 'password':
            case 'hidden':
            case 'textarea':
                return methods.getDefaultVal(dom);
            case 'select-one':
            case 'select-multiple':
                return methods.getSelectVal(dom);
            case 'radio':
                return methods.getRadioVal(dom);
            case 'checkbox':
                return methods.getCheckBoxVal(dom);
            default:
                return '';
        }
    };

    var domType = json.Type;
    var doms = $(json.Doms);
    var count = doms.length;
    if (count > 1) {
        var val = '';
        var index = 0;
        for (var i = 0; i < count; i++) {
            var v = dispacher(domType, doms.eq(i));
            if (v == '' || v == null || v == undefined)
                continue;
            val += index++ == 0 ? dispacher(domType, doms.eq(i)) : (',' + dispacher(domType, doms.eq(i)));
        }
        return val;
    } else {
        return dispacher(domType, doms);
    }
};

})(jQuery);
AJAX调用为:
var formjson=$("#main").form_serialize();
$.getJSON(actionnm,formjson, function(data)
到后台后FORM中输入的中文就乱码了
JSP、ACTION应该没问题、因为我改为FORM的SUBMIT提交就没问题
JS中的这段我改了一下
getDefaultVal: function (dom) {
eturn encodeURI(encodeURI($(dom).val()));
},
还是乱码
不知应怎么改?
应改不是那段JS的问题
我改成
var formjson={"wfclient.cname":"字字"};
$.getJSON(actionnm,formjson, function(data)
也不行

  • 写回答

3条回答 默认 最新

  • lanrenjun 2011-01-14 21:25
    关注

    ajax用post的方式提交 可以避免上述问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记