每次刷新时JSON数据都会更改
我得到了一个从json文件中获取数据的ajax调用。 之后我计算物体的长度并获得长度。 一切都很好。 但是在刷新时它不会以相同的顺序显示数据
//url i get from another file.which is a object hardcoded. var initialsource = [{ "data": [] }]; var totallength = url.length; var j = 0; // dummy variable to check whether the data has reached full length; $.each(url,function(keys,values){ console.log(keys); // get the keys which is mapped to json file location.// 1st console. $.get(values, function(jsondata) { // ajax call made to get the data console.log(keys); // 2nd console. initialsource[0].data.push({ "datasource": keys, "values": jsondata[0].xxx.length }) j++; if (j == totallength) { //render data to html } }) })
首次刷新
console-1输出
Data-1:value-1 Data-2:value-2 Data-3:value-3 Data-4:value-4
console-2输出
Data-1:value-1 Data-2:value-2 Data-3:value-3 Data-4:value-4
第二次刷新
console-1输出
Data-1:value-1 Data-2:value-2 Data-3:value-3 Data-4:value-4
console-2输出//这里发生了变化
Data-2:value-2 Data-1:value-1 Data-3:value-3 Data-4:value-4
每次刷新我都会改变数据顺序。 这也反映在我的HTML中。 如果有人可以帮忙
这是因为$.get
请求是异步的。 这意味着它们不保证按发送顺序返回。 如果需要维护订单,则需要在请求完成后sort()
对象进行sort()
。 试试这个:
var requests = []; $.each(url, function(keys, values) { requests.push($.get(values, function(jsondata) { initialsource[0].data.push({ "datasource": keys, "values": jsondata[0].xxx.length }); })); }) $.when.apply(this, requests).done(function() { var sortedData = initialsource.sort(function(a, b) { return a.values < b.values; }); // sortedData is now in length order, use it as required here... });
为什么你不使用jQuery基于键对数据进行排序,并执行你想要做的操作。 我有自定义排序的粘贴代码,请希望你需要。
jQuery.fn.sort = function() { return this.pushStack( [].sort.apply( this, arguments ), []); }; function sortLastName(a,b){ if (a.l_name == b.l_name){ return 0; } return a.l_name> b.l_name ? 1 : -1; }; function sortLastNameDesc(a,b){ return sortLastName(a,b) * -1; }; var people= [ { "f_name": "john", "l_name": "doe", "sequence": "0", "title" : "president", "url" : "google.com", "color" : "333333", }] sorted=$(people).sort(sortLastNameDesc);