相关文章
更多最近更新
更多AJAX JSON 乱码
2019-03-25 13:40|来源: 网路
网上下了一个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)
也不行
问题补充:解决了、但是不爽
1 var methods = {
getDefaultVal: function (dom) {
return encodeURI($(dom).val()、"UTF-8");
},
2 在BEAN的SET方法上改为
public void setCname(String cname){
try {
this.cname = URLDecoder.decode(cname,"UTF-8");
} catch (UnsupportedEncodingException e) {
this.cname=cname;
}
}
凡是有中文的BEAN属性的SET方法都要改
感觉很不爽
有没有更好的方法
或能提交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)
也不行
问题补充:解决了、但是不爽
1 var methods = {
getDefaultVal: function (dom) {
return encodeURI($(dom).val()、"UTF-8");
},
2 在BEAN的SET方法上改为
public void setCname(String cname){
try {
this.cname = URLDecoder.decode(cname,"UTF-8");
} catch (UnsupportedEncodingException e) {
this.cname=cname;
}
}
凡是有中文的BEAN属性的SET方法都要改
感觉很不爽
有没有更好的方法
或能提交JSON的其他AJAX命令
问题补充:
wangqj 写道
你这种方法,是先编码,再解码的方式
还是我说的那个方法,你找到jQuery发送请求的那个函数,
$.ajax 这个函数里面有个参数,你可以找一下
还是我说的那个方法,你找到jQuery发送请求的那个函数,
$.ajax 这个函数里面有个参数,你可以找一下
那个参数啊?
网上查、书上查也没发现哪个参数象?
问题补充:
lanrenjun 写道
ajax用post的方式提交 可以避免上述问题
谢谢
相关问答
更多-
通过本地客户端程序获取服务器mysql数据库信息[2023-04-27]
ajax -
为什么pdf是乱码[2023-03-29]
pdf乱码的根本原因是文件的内码丢失了,需要用龙谷的 pdf内码校正 进行校正后就可以正常拷贝复制和另存成word或txt而没有乱码了。 -
pdf为什么是乱码[2022-10-08]
1. 什么是乱码?(即PDF文档文字符号显示原理) 计算机系统中显示出来的字符,是通过每个字符对应的唯一码(即内码),再用此字符不同字体的字模样式显示出来。如:” 国 ”字的内码是“ B9FA ”,用黑体显示就是“ 国 ”的字样,用楷体显示就是“ 国 ”的字样,但内码都是同一的“ B9FA ”。 对于PDF文档来说也一样,当打开一个PDF文件时,我们看到显示出来的字符是每个字符的字模样式,但当字模与该字符对应的内码不能对应时,将PDF文档内的字符复制黏贴出来则会出现乱码现象,即显示非对应内码的另外一个字符。 ... -
ajax中json 是什么[2019-05-11]
1.json是一种数据格式,比xml要简洁 2.都不算是 3.在ajax一般是json来传递数据 4.不需要什么包或者文件,只要你遵守json的数据格式即可 如 {"name":"admin","age":22} ,这个是封装一个人的信息姓名年龄 -
jquery ajax json遍历[2022-05-07]
方法比较简单,比如json的格式是这样的: var obj = {a:1,b:'hello word!'}; for(var a in obj){ document.write(a+"------------"+obj[a]); } 你拿js脚本运行一下这个,你就明白了。 -
js发送的中文值到php变成了乱码[2022-05-18]
Ajax 只能发送utf8格式数据,有可能你接收的那个页面使用了非utf8编码 -
jquery post后接收数据是乱码[2021-10-25]
后台是什么语言,后台也要设置编码格式 另外 jquery ajax 有 一个设置编码的属性 contentType -
Ajax没有获得JSON值(Ajax not getting JSON value)[2022-02-06]
您没有正确绑定您的参数,因此您可能有一个您没有处理的PDO错误。 更改: $chec->bindParam('cp', $cpf, PDO::PARAM_STR); $chec->bindParam('pw', $passw, PDO::PARAM_STR); 至: // notice the colon : in front of var names, so it matches the placeholders! $chec->bindParam(':cp', $cpf, PDO::PARAM_STR ... -
不一样 Ajax是一种异步发送请求和接受数据的技术(不需要重新加载页面)。 您可以使用JSON或XML发送数据或只使用字符串。 当您执行Ajax请求时,除字符串之外的任何数据类型(如数组,对象,数字..)都将丢失其数据类型并成为字符串,因此如果要保留其类型,则必须使用数据传输格式,如JSON和XML 。 Dojo只是一个库,它有更简单的方法来执行Ajax。 你也可以使用jQuery,Angular,..甚至连JavaScript本机XMLHttpRequest。 Not the same Ajax is a ...
-
data是字符串类型。 在循环之前将字符串解析为JSON: data = JSON.parse(data); $.each(data, function() { The data is of string type. Parse the string into JSON before looping: data = JSON.parse(data); $.each(data, function() {