一次Ajax请求从PHP服务器端返回所有数据,后在客户端根据需要排序,服务器返回如下JSON数据,
{'all':[{'id':'1','name':'Bruce','vote':151,'bad':1,'title':'学习Javascript'},
{'id':'2','name':'Lini','vote':11,'bad':141,'title':'学习Ajax'},
{'id':'3','name':'Jack','vote':121,'bad':4,'title':'学习JQuery'},
{'id':'4','name':'Cals','vote':151,'bad':41,'title':'学习PHP'},
{'id':'5','name':'Lucy','vote':13,'bad':5,'title':'学习MySQL'},
{'id':'6','name':'Paul','vote':166,'bad':11,'title':'学习CSS'},
{'id':'7','name':'John','vote':15,'bad':188,'title':'学习HTML'},
{'id':'8','name':'Ben','vote':19,'bad':335,'title':'学习C++'},
{'id':'9','name':'Coa','vote':277,'bad':33,'title':'学习C'}]}因为要同时显示两个排序结果(默认显示id排序结果),所以服务器端只能输出按id排序后的结果,页面另一个地方显示按vote从大到小的排序结果,搜索也没有找到,自己整了半天无果,请高手帮忙
{'all':[{'id':'1','name':'Bruce','vote':151,'bad':1,'title':'学习Javascript'},
{'id':'2','name':'Lini','vote':11,'bad':141,'title':'学习Ajax'},
{'id':'3','name':'Jack','vote':121,'bad':4,'title':'学习JQuery'},
{'id':'4','name':'Cals','vote':151,'bad':41,'title':'学习PHP'},
{'id':'5','name':'Lucy','vote':13,'bad':5,'title':'学习MySQL'},
{'id':'6','name':'Paul','vote':166,'bad':11,'title':'学习CSS'},
{'id':'7','name':'John','vote':15,'bad':188,'title':'学习HTML'},
{'id':'8','name':'Ben','vote':19,'bad':335,'title':'学习C++'},
{'id':'9','name':'Coa','vote':277,'bad':33,'title':'学习C'}]}因为要同时显示两个排序结果(默认显示id排序结果),所以服务器端只能输出按id排序后的结果,页面另一个地方显示按vote从大到小的排序结果,搜索也没有找到,自己整了半天无果,请高手帮忙
1、第一个地方就是你目前的这种顺序:ID排序
2、第二个地方就是用vote排序。
解决方法如下:
你可以返回一个大的json串,这么写
{"sortById":[{},{}],
"sortByVote:[{},{}]}明白了么?就是返回2个排序的结果,你在第一个地方用sortById的数据,第二个地方用sortByVote的数据。
缺点:返回客户端的数据量翻了一倍
优点:简单易行,不用前台js再次处理
datas 要排序的数组,其中每个元素是一个JSON对象{}
field 要排序的元素的字段名,将使用该字段进行排序
type 排序类型,如果为"down"则为降序排序,否则升序
*/
function SortData(datas, field, type) {
SortFun.field = field;
datas.sort(SortFun);
if (type == "down") {
datas.reverse();
}
}
function SortFun(data1, data2) {
if (data1[SortFun.field] > data2[SortFun.field]) {
return 1;
}
else if (data1[SortFun.field] < data2[SortFun.field]) {
return -1;
}
return 0;
}
SortData(data.all,"id","down"); //如果升序的话,去掉第三个参数即可