为什么我的json读出来不是按顺序排的?

大海008 2013-01-06 10:02:55
我读出来的数据是:{"status":0,"data":{"rw":{"12":{"name":"\u98ce\u6b62\u5982\u6b87","vip_level":"8","union_name":"\u9752\u8863\u697c","level":"66","renown":"93304","ticket":"0","sum_fpower":"412052","trend":0,"rank":1},"636":{"name":"\u725b\u5976\u5e03\u4e01","vip_level":"7","union_name":"\u9752\u8863\u697c","level":"62","renown":"62691","ticket":"0","sum_fpower":"321352","trend":0,"rank":2},"292":{"name":"\u5c91\u8a89","vip_level":"6","union_name":"\u9752\u8863\u697c","level":"60","renown":"46174","ticket":"0","sum_fpower":"263584","trend":0,"rank":3},"342":{"name":"\u590f\u4faf\u9091","vip_level":"4","union_name":"\u9752\u8863\u697c","level":"57","renown":"28604","ticket":"0","sum_fpower":"147766","trend":0,"rank":4},"31":{"name":"\u65e0\u5929","vip_level":"5","union_name":"\u9752\u8863\u697c","level":"57","renown":"28237","ticket":"0","sum_fpower":"144644","trend":0,"rank":5},"128":{"name":"\u865e\u4e2d\u9053","vip_level":"3","union_name":"\u9752\u8863\u697c","level":"56","renown":"30753","ticket":"0","sum_fpower":"148505","trend":0,"rank":6},"297":{"name":"\u8001\u5934\u5b50","vip_level":"4","union_name":"\u9752\u8863\u697c","level":"55","renown":"25296","ticket":"0","sum_fpower":"140126","trend":0,"rank":7},"407":{"name":"\u97e6\u4eba\u6770","vip_level":"2","union_name":"\u9752\u8863\u697c","level":"55","renown":"21754","ticket":"0","sum_fpower":"109610","trend":0,"rank":8},"153":{"name":"\u79e6\u9053\u7f61","vip_level":"1","union_name":"\u9752\u8863\u697c","level":"54","renown":"19211","ticket":"0","sum_fpower":"120409","trend":0,"rank":9},"345":{"name":"\u5fa1\u5251","vip_level":"4","union_name":"\u9752\u8863\u697c","level":"52","renown":"16255","ticket":"0","sum_fpower":"118658","trend":0,"rank":10}}}}

$.ajax(
{
type:"GET",
url:"rank.ashx",
data:{server:ServerID,order:Type},
dataType:'json',
cache:false,
success: function(datas){
var rw=datas.data.rw,item;

for (var j in rw) {

trHtml += '<td class="lie2"><span class="jue_te">'+item.name+'</span></td>';
trHtml += '<td class="lie3"><span class="jue_te">'+item.level+'</span></td>';

trHtml += '</tr>';}
}
})

结果 level 上不是上面的顺序排的,有点像随机是怎么回事
...全文
881 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihanbing 2013-01-07
  • 打赏
  • 举报
回复
以前用的什么浏览器什么版本?现在用的什么浏览器什么版本?以前的代码用现在的环境运行试过没?
大海008 2013-01-07
  • 打赏
  • 举报
回复
意思是,以前写的json顺序的,都不需要重新再排序,用for(...in ..)读出来都是按顺序的,但这次却还要再次排序,而且还有不重排序的话的只有firefox是正常的,其它不正常
lihanbing 2013-01-07
  • 打赏
  • 举报
回复
引用 21 楼 flysky862 的回复:
我是有点困惑,我以前也是这么写的,排序就是正常的,这样这样写就是乱的(当然数据源是不一样的) ……
没看明白什么意思
大海008 2013-01-07
  • 打赏
  • 举报
回复
引用 19 楼 lihanbing 的回复:
因为是新构造的数组,所以键是从0开始的,要是想保留原来的键就把它存进 rw[j] 里面 for (var j in rw) { rw[j].key = j; ary.push(rw[j]); }
我是有点困惑,我以前也是这么写的,排序就是正常的,这样这样写就是乱的(当然数据源是不一样的)
大海008 2013-01-07
  • 打赏
  • 举报
回复
引用 19 楼 lihanbing 的回复:
因为是新构造的数组,所以键是从0开始的,要是想保留原来的键就把它存进 rw[j] 里面 for (var j in rw) { rw[j].key = j; ary.push(rw[j]); }
非常感谢
lihanbing 2013-01-07
  • 打赏
  • 举报
回复
因为是新构造的数组,所以键是从0开始的,要是想保留原来的键就把它存进 rw[j] 里面 for (var j in rw) { rw[j].key = j; ary.push(rw[j]); }
大海008 2013-01-07
  • 打赏
  • 举报
回复
引用 17 楼 lihanbing 的回复:
其实自己排也很简单 JavaScript code?123456789101112131415var rw=datas.data.rw,item;var trHtml = "";var ary = [];for (var j in rw) { ary.push(rw[j]);}ary.sort(function(a,b){ return b.level ……
这个可以,但为什么alert(j)输出0-9后便输出字符,一些关键字是什么原因
lihanbing 2013-01-07
  • 打赏
  • 举报
回复
其实自己排也很简单

			var rw=datas.data.rw,item;
			var trHtml = "";
			var ary = [];
			for (var j in rw) {
				ary.push(rw[j]);
			}
			ary.sort(function(a,b){
				return b.level - a.level;
			});
			for (var j in ary) {
				var item = ary[j];
				trHtml += '<tr><td class="lie2"><span class="jue_te">'+item.name+'</span></td>';
				trHtml += '<td class="lie3"><span class="jue_te">'+item.level+'</span></td>';
				trHtml += '</tr>';
			}

lihanbing 2013-01-07
  • 打赏
  • 举报
回复
那你只能自己排一遍了
大海008 2013-01-07
  • 打赏
  • 举报
回复
引用 14 楼 lihanbing 的回复:
Plain Text code?12345根据 ECMA-262(ECMAScript)第三版中描述,for-in 语句的属性遍历的顺序是由对象定义时属性的书写顺序决定的。 在现有最新的 ECMA-262(ECMAScript)第五版规范中,对 for-in 语句的遍历机制又做了调整,属性遍历的顺序是没有被规定的。 新版本中的属性遍历顺序说明与早期版本不同,这将导致遵循 ……
可后台的结果不控制在我手上啊
大海008 2013-01-07
  • 打赏
  • 举报
回复
以前的,各种浏览器都正常的
Go 旅城通票 2013-01-06
  • 打赏
  • 举报
回复
你的什么浏览器?我这里测试你给的字符串是按照循序的,不过我是eval,不是用jq,难道jq转为json时修改过循序了。。?
lihanbing 2013-01-06
  • 打赏
  • 举报
回复

根据 ECMA-262(ECMAScript)第三版中描述,for-in 语句的属性遍历的顺序是由对象定义时属性的书写顺序决定的。

在现有最新的 ECMA-262(ECMAScript)第五版规范中,对 for-in 语句的遍历机制又做了调整,属性遍历的顺序是没有被规定的。

新版本中的属性遍历顺序说明与早期版本不同,这将导致遵循 ECMA-262 第三版规范内容实现的 JavaScript 解析引擎在处理 for-in 语句时,与遵循第五版规范实现的解析引擎,对属性的遍历顺序存在不一致的问题。

所以你的脚本在不同版本浏览器下运行,可能会得到不一样的结果,所以依赖对象属性顺序并不可靠,建议 rw 改成对象数组

{rw:[{"id":12,"name":"\u98ce\u6b62\u5982\u6b87","vip_level":"8","union_name":"\u9752\u8863\u697c","level":"66","renown":"93304","ticket":"0","sum_fpower":"412052","trend":0,"rank":1},
{"id":13,................}]}
这个顺序是绝对不会变的
大海008 2013-01-06
  • 打赏
  • 举报
回复
取出的数据都是顺序的,但写出来就不对
大海008 2013-01-06
  • 打赏
  • 举报
回复
大海008 2013-01-06
  • 打赏
  • 举报
回复
正常来说是按结果:xxx1 66 xxx2 62 xxx3 60 xxx4 57
licip 2013-01-06
  • 打赏
  • 举报
回复
我觉得这个顺序你在后台就要处理好吧。在前台来了,就直接用吧。
大海008 2013-01-06
  • 打赏
  • 举报
回复
还有一个忘记写了: item = rw[j];
大海008 2013-01-06
  • 打赏
  • 举报
回复
我要按level或rank排序
大海008 2013-01-06
  • 打赏
  • 举报
回复
引用 11 楼 lihanbing 的回复:
测试IE6,firefox都正常,你那个不对的也不是随机,是按照rw里的key排序了,12的在最前面,636在最后面 XML/HTML code?1234567891012 风止如殇 66 636 牛奶布丁 62 292 岑誉 60 342 夏侯邑 57 31 无天 57 128 虞中道 56 297 老头子 55 407 韦人杰 55 153 秦道罡 54 345 御……
那为什么会按key排啊,我是按后台给的数据排的,怎么操作
加载更多回复(5)

87,917

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧