网上下了一个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)
也不行