jquery json以正确的列顺序连接到动态html表

jquery json以正确的列顺序连接到动态html表,jquery,json,Jquery,Json,我希望Html表反映与json中所示相同的列顺序。我期待着这个 公司,2007年,2008年,2009年 这是data.d中的json响应 [{“公司”:“ABC Infotech,“2007”:“3”,“2008”:“3”,“2009”:“4”},{“公司”:“TPS” 软件,“2007”:“6”,“2008”:“8”,“2009”:“6”},{“公司”:“XYZ” 信息系统,2007:“1”,“2008:“3”,“2009:“6”}] 创建Html表的函数返回一个列顺序,如下所示 2007年

我希望Html表反映与json中所示相同的列顺序。我期待着这个

公司,2007年,2008年,2009年

这是data.d中的json响应

[{“公司”:“ABC Infotech,“2007”:“3”,“2008”:“3”,“2009”:“4”},{“公司”:“TPS” 软件,“2007”:“6”,“2008”:“8”,“2009”:“6”},{“公司”:“XYZ” 信息系统,2007:“1”,“2008:“3”,“2009:“6”}]

创建Html表的函数返回一个列顺序,如下所示

2007年、2008年、2009年,公司

下面的脚本完美地返回json。我尝试过各种json到html表脚本,当通过eval或json.parse转换时,它们似乎在对列名排序

有办法吗

$(document).ready(function () {

    //the div in the page...
    //<div id="output"style="margin: 10px;"></div>

    $.makeTable = function (mydata) {
        var table = $('<table class="table table-striped table-bordered" >');
        var tblHeader = "<tr>";
        for (var k in mydata[0]) tblHeader += "<th>" + k + "</th>";
        tblHeader += "</tr>";
        $(tblHeader).appendTo(table);
        $.each(mydata, function (index, value) {
             var TableRow = "<tr>";
             $.each(value, function (key, val) {
                 TableRow += "<td>" + val + "</td>";
             });
             TableRow += "</tr>";
             $(table).append(TableRow);
        });
        return ($(table));
    };

    return_pivot();
    function return_pivot() {
        //get file count
        var jsonText = JSON.stringify({
            new_file: "DataForPivot.xls",
            row_field: "Company",
            data_field: "CTC",
            column_fields: "Year"
        });

        $.ajax({
            type: "POST",
            url: "Pivot.aspx/pivot",
            data: jsonText,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data.d != "0") {
                    console.log(data.d)
                    var mydata = eval(data.d);
                    var table = $.makeTable(mydata);
                    $(table).appendTo("#output");
                } 
            }
        }); //end ajax call
    }
});
$(文档).ready(函数(){
//页面中的div。。。
//
$.makeTable=函数(mydata){
变量表=$('');
var tblHeader=“”;
对于(mydata[0]中的var k)tblHeader+=“”+k+“”;
tblHeader+=“”;
$(tblHeader).附录(表);
$.each(mydata、函数(索引、值){
var TableRow=“”;
$.each(值、函数(键、值){
TableRow+=“”+val+“”;
});
TableRow+=“”;
$(表).append(表行);
});
报税表(元);;
};
return_pivot();
函数返回_pivot(){
//获取文件计数
var jsonText=JSON.stringify({
新的_文件:“DataForPivot.xls”,
行字段:“公司”,
数据字段:“CTC”,
列_字段:“年”
});
$.ajax({
类型:“POST”,
url:“Pivot.aspx/Pivot”,
数据:jsonText,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(数据){
如果(数据d!=“0”){
console.log(data.d)
var mydata=eval(data.d);
var table=$.makeTable(mydata);
$(表).appendTo(#output”);
} 
}
});//结束ajax调用
}
});

您的问题是,对象键总是按数字顺序排列,然后按字母顺序排列

尝试按如下方式订购钥匙:-

函数SortalPhathenumeric(a,b){
如果(!isNaN(a)&&!isNaN(b))
返回a>b;
if(伊斯南(a)和伊斯南(b))
返回a.toLowerCase()>b.toLowerCase();
if(isNaN(a))
返回false;
返回true;
}
$.makeTable=函数(mydata){
变量表=$('');
var tblHeader=“”;
var orderedKeys=Object.keys(mydata[0]).sort(sortalphathennumeric);
对于(orderedKeys中的var k)tblHeader+=“”+k+“”;
tblHeader+=“”;
$(tblHeader).附录(表);
$.each(mydata、函数(索引、值){
var TableRow=“”;
$.each(orderedKeys,function(key,val){
TableRow+=“”+值[val]+“”;
});
TableRow+=“”;
$(表).append(表行);
});
报税表(元);;

};对象是无序的属性集合,因此无法保证字符串中每个属性的顺序:

{"Company":"ABC Infotech","2007":"3","2008":"3","2009":"4"}
为了保持这样的顺序,您可以向makeTable函数添加一个新参数,该函数包含一个键数组(因此,按索引排序),这些键的顺序必须得到遵守

我的片段:

$.makeTable=函数(mydata,orderToRespect){
变量表=$('');
var tblHeader=“”;
forEach(函数(元素,索引){
tblHeader+=“”+ele+“”;
});
tblHeader+=“”;
$(tblHeader).附录(表);
$.each(mydata、函数(索引、值){
var TableRow=“”;
forEach(函数(元素,索引){
TableRow+=“”+值[ele]+“”;
});
TableRow+=“”;
$(表).append(表行);
});
报税表(元);;
};
//
//你的数据
// 
var mydata=[{“公司”:“ABC信息技术”,“2007”:“3”,“2008”:“3”,“2009”:“4”},
{“公司”:“TPS软件”,“2007”:“6”,“2008”:“8”,“2009”:“6”},
{“公司”:“XYZ信息系统”,“2007”:“1”,“2008”:“3”,“2009”:“6”}];
//
//使用新参数调用makeTable函数
//包含尊重的命令
//
var table=$.makeTable(mydata,['Company','2007','2008','2009']);
$(表).appendTo(#output”)


您可以考虑只建立HTML服务器端……需要一个JavaScript解决方案。JSON响应中返回的列是随机的,基于客户数据,我不知道预期的顺序。@ RB我理解您的问题,但是我不能忽略一个对象没有订单。在将字符串转换为对象数组之前,可以尝试使用该字符串。通过这种方式,您可以尝试使用自己的解析器提取顺序。这是我看到的替代方案。同意,将获取服务器上的列并将它们附加到响应中。谢谢你的解决方案!我已经为这个解决方案做了很多准备。谢谢!但是json响应是随机的,所以我不能假设它是按特定顺序的。响应中的数据一直在变化。