每次刷新时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);