/*配对后发送微博,这个需要@xx*/
function faweibo(id){
var users = new Array();
$("#friendList dd p input[type=checkbox]").each(function(i){
if($(this).attr("checked"))
users.push(encodeURIComponent($(this).val()));
});
users = toJSON(users);
$.ajax({
type:'post',
url:"/qq/pei/faweibo.do",
data:{'users':users},
success: function(data){
popfruit('send_ok',200);
});
}
上面的这个函数是当弹窗一个窗口的时候,获取用户选择的checkbox,如果选中了就将用户的id放到数组,传给后台
这里需要一个arraytoson的方法
//将一个数组转换json对象
function toJSON(obj){
var json = '({';
$.each(obj, function(k,v){
var q = typeof v == 'string' ? ~v.indexOf("'") ? '"' : "'" : '';
if (typeof v == 'object')
v = toJSON(v).slice(0,-1).substr(1);
json+= k + ':'+ q + v + q + ',';
});
return json.slice(0,-1)+'})';
};
如果后台是用php就简单多了, data:{'users':users},根本就不要转换。在java中就需要自己进行转换。
下面的parseJsonToArray就是负责转换的。
@Action(value = "faweibo", results = { @Result(name = SUCCESS, type = "json", params = {
"target", "jsonMap" }) })
public String faweibo() throws Exception {
String users = request.getParameter("users");
users = java.net.URLDecoder.decode(users, "utf-8");
List<String> u = parseJsonToArray(users);
//u中放的就是前台传过来的userId的值。
}
这里需要解析传过来的json字符串
public static List<String> parseJsonToArray(String data) {
List<String> list = new ArrayList<String>();
if (null == data || data.length() == 0) {
return null;
}
if (data.length() < 4) {
return null;
}
String temp = data.substring(2, data.length() - 2);
temp = temp.replaceAll("\\'", "");
String splitResult[] = temp.split(",");
for (int i = 0; i < splitResult.length; i++) {
list.add(splitResult[i].substring(splitResult[i].indexOf(":") + 1));
}
return list;
}
这样就可以获得前台传过来的多个参数。
这里想要要用数组来传参,而不是通过 data:{'user1':user1,''user2':user2,''user3':user3,'}这样的方式,主要是考虑如果有多个checkbox的时候,这样添加参数会很蛋疼。所以想到用数组传参来解决这个问题。
以上是自己在项目中用的解决办法,希望可以得到大家的指点。