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 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备