排序的Javascript错误

时间:2015-02-11 00:35:17

标签: javascript json api

我有如下所示的代码,

我从一位因为遇到家庭麻烦而去了afk的开发者那里得到了这个

基本上下面这段代码应该抓住json结果,然后在对价格进行排序后将它们放入表中,然后将其放入表中。

继承人的代码

//first define a function
var sortTable = function () {
        $("#tableid tbody tr").detach().sort(function (a, b) {
            //substring was added to omit currency sign, you can remove it if data-price attribute does not contain it.
            return parseFloat($(a).data('price').substring(1)) - parseFloat($(b).data('price').substring(1));
        })
        .appendTo('#tableid tbody');
    };
//include two files where rows are loaded
    //1.js
    $.ajax({
        type: 'GET',
        crossDomain: true,
        dataType: 'json',
        url: 'api link here',
        success: function (json) {
            //var json = $.parseJSON(data);
            for (var i = 0; i < json.results.length; i++) {
                var section = json.results[i].section;
                var no = json.results[i].avalible;
                var price = json.results[i].price;
                var button = "<button class='redirect-button' data-url='LINK'>Compare</button>";
               $("#tableid tbody").append("<tr data-price='" + price + "'><td>" + section + "</td><td>" + no + "</td><td>" + price + "</td><td>" + button + "</td></tr>");
                $("#tableid").find(".redirect-button").click(function () {
                    location.href = $(this).attr("data-url");
                });
            }
            sortTable();
        },
        error: function (error) {
            console.log(error);
        }
    });
    //and here is the 2nd js file
    $.ajax({
        type: 'GET',
        crossDomain: true,
        dataType: 'json',
        url: '2nd api',
        success: function (json) {
            //var json = $.parseJSON(data);
            for (var i = 0; i < json.results.length; i++) {
                var section = json.results[i].section;
                var no = json.results[i].avalible;
                var price = json.results[i].amount;
                var button = "<button class='redirect-button' data-url='LINK'>Click Here</button>";
                $("#tableid tbody").append("<tr data-price='" + price + "'><td>" + section + "</td><td>" + no + "</td><td>" + price + "</td><td>" + button + "</td></tr>");
                $("#tableid").find(".redirect-button").click(function () {
                    location.href = $(this).attr("data-url");
                });
            }
            sortTable();
        },
        error: function (error) {
            console.log(error);
        }
    });

1 个答案:

答案 0 :(得分:0)

访问DOM,获取需要排序的数据,是一种不好的做法IMO。更糟糕的是,当您首先以原始JSON形式获得结果时(在ajax调用的成功回调中)。你的成功函数应该做这样的事情

    success: function (json) {
        //first sort the results - or better store these results somewhere
        //and use that as a data store that is responsible for what is rendered in the DOM
        json.results.sort(function(a,b) {
            //using substring and parseFloat just like it was done in sortTable 
            //assuming price field has prices as strings with currency symbol in the first place
            return parseFloat(a.substring(1)) - parseFloat(b.substring(1))
        });
        for (var i = 0; i < json.results.length; i++) {
            var section = json.results[i].section;
            var no = json.results[i].avalible;
            var price = json.results[i].amount;
            var button = "<button class='redirect-button' data-url='LINK'>Click Here</button>";
            $("#tableid tbody").append("<tr data-price='" + price + "'><td>" + section + "</td><td>" + no + "</td><td>" + price + "</td><td>" + button + "</td></tr>");
            $("#tableid").find(".redirect-button").click(function () {
                location.href = $(this).attr("data-url");
            });
        }
    }