javascript - 从大型 JSON 数据中分离值

标签 javascript php jquery ajax json

我有一个 jquery,我现在想分享

$('#load').click(function()
    {
        var v = $('#drp_v').val();
        var cnt = $('#drp_cnt').val();
        var ctg = $('#drp_ctg').val();
        var api = $('#drp_api').val();
        var nt = $('#drp_nt').val();
        $.post("ajax.php",
            {   'version':v,'category':ctg,
                'country':cnt,'network_id':nt,
                'api':api,'func':'show_datatable',
                'start_row':'0','limit':'2'},
                        function(data)
                        {
                            alert(data[1].limit);
                            var aColumns = [];
                            var columns = [];
                            for(var i = 0; i < data.length; i++) 
                            {
                                if(i>0)
                                    break;
                                keycolumns = Object.keys(data[i]); 
                                for(j = 0; j < keycolumns.length; j++)
                                {
                                    if($.inArray(keycolumns[j],aColumns.sTitle)<=0)
                                    {
                                        aColumns.push({sTitle: keycolumns[j]}) //Checks if
                                        columns.push(keycolumns[j]) //Checks if
                                    }                                  
                                }

                            }

                            var oTable = $('#jsontable').dataTable({
                                "columns":aColumns,
                                "sDom": 'T<"clear">lfrtip',
                                    "oTableTools": {
                                        "aButtons": [
                                            {
                                                    "sExtends": "csv",
                                                    "sButtonText": "CSV",
                                             }
                                        ]
                                    }
                            });
                            oTable.fnClearTable();
                            var row = []
                            for(var i = 0; i < data.length; i++) 
                            {
                                for(var c = 0; c < columns.length; c++) 
                                {
                                        row.push( data[i][columns[c]] ) ;
                                }
                                oTable.fnAddData(row);
                                row = [];
                            }
                        },'json');
    });

现在 ajax.php 在这里结束,它将数据返回给 jquery ajax 回调函数

 function show_datatable($version,$ctg,$cnt,$nt,$api,$start_row,$limit)
    {

        $cnt_table = "aw_countries_".$version;
        $ctg_table = "aw_categories_".$version;
        $off_table = "aw_offers_".$version;
        $sizeof_ctg = count($ctg);
        $cond_ctg = " ( ";
        for($c = 0; $c < $sizeof_ctg ; $c++)
        {
            $cond_ctg = $cond_ctg." $ctg_table.category = '".$ctg[$c]."' ";
            if($c < intval($sizeof_ctg-1))
                $cond_ctg = $cond_ctg." OR ";
            else if($c == intval($sizeof_ctg-1))
                $cond_ctg = $cond_ctg." ) ";
        }
        $sizeof_cnt = count($cnt);
        $cond_cnt = " ( ";
        for($cn = 0; $cn < $sizeof_cnt ; $cn++)
        {
            $cond_cnt = $cond_cnt." $cnt_table.country = '".$cnt[$cn]."' ";
            if($cn < intval($sizeof_cnt-1))
                $cond_cnt = $cond_cnt." OR ";
            else if($cn == intval($sizeof_cnt-1))
                $cond_cnt = $cond_cnt." ) ";
        }
        $sizeof_nt = count($nt);
        $cond_nt = " ( ";
        for($n = 0; $n < $sizeof_nt ; $n++)
        {
            $cond_nt = $cond_nt." $off_table.network_id = '".$nt[$n]."' ";
            if($n < intval($sizeof_nt-1))
                $cond_nt = $cond_nt." OR ";
            else if($n == intval($sizeof_nt-1))
                $cond_nt = $cond_nt." ) ";
        }
        $sizeof_api = count($api);
        $cond_api = " ( ";
        for($a = 0; $a < $sizeof_api ; $a++)
        {
            $cond_api = $cond_api." $off_table.api_key = '".$api[$a]."' ";
            if($a < intval($sizeof_api-1))
                $cond_api = $cond_api." OR ";
            else if($a == intval($sizeof_api-1))
                $cond_api = $cond_api." ) ";
        }
        $output         = "";
        $sql = "SELECT *
                FROM $off_table,$cnt_table,$ctg_table
                WHERE  $off_table.id = $cnt_table.id
                AND $off_table.id = $ctg_table.id
                AND ".$cond_api."
                AND ".$cond_nt."
                AND ".$cond_cnt."
                AND ".$cond_ctg." LIMIT $start_row , $limit";
        $result = mysql_query($sql);
        $arr_result = array();
        while($row = mysql_fetch_assoc($result))
        {
            $arr_result[] = $row;
        }
        $arr_result_enc = json_encode($arr_result);
        echo $arr_result_enc;



        $arr_limit = array(
                'start_row' => intval($start_row + $limit),
                'limit' => $limit
        );
        $arr_limit_enc = json_encode($arr_limit);


echo $arr_limit_enc;
}

现在的问题是我得到这样的数据

[{"id":"10580","name":"Galaxy Legend (Android, Free, ROW, w\/ capping)"},  
 {"id":"10718","name":"Slots Vacation (Android, Free, Tier 3, 35MB, w\/ca"}]{"start_row":2,"limit":"2"}

[]里面的数据部分是我需要加载到数据表中的数据库结果,

{"start_row":2,"limit":"2"} 应单独用于检查目的。

但问题是,我无法将它们分开,即我无法分开

1. [{"id":"10580","name":"Galaxy Legend (Android, Free, ROW, w\/ capping)"},  
         {"id":"10718","name":"Slots Vacation (Android, Free, Tier 3, 35MB, w\/ca"}]

第二个

2. {"start_row":2,"limit":"2"}

我该怎么做?

提前致谢

最佳答案

像这样重新格式化返回的 JSON:

return json_encode(array(
    'database'    => $database,
    'parameters'  => $parameters
));

以便 JSON 读取

{
    "database": [{"id":"10580","name":"Galaxy Legend (Android, Free, ROW, w\/ capping)"},
               {"id":"10718","name":"Slots Vacation (Android, Free, Tier 3, 35MB, w\/ca"}
    ],
    "parameters": {"start_row":2,"limit":"2"}
}

然后在接收data的jQuery中,你将在你现在使用数据的地方使用data.database,并使用data.parameters来读取其他信息。 IE。 data.parameters.limit 将为您提供 2,依此类推:

function(data) {
    // OLD alert(data[1].limit);
    alert(data.parameters.limit);
    ...
    for(var i = 0; i < data.database.length; i++) {
        if (i>0) break;
        keycolumns = Object.keys(data.database[i]);
        ...

关于javascript - 从大型 JSON 数据中分离值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269374/

相关文章:

php - MySQL 错误 : Can't create table (errno: 121 "Duplicate key on write or update")

php - 在 Woocommerce 中为每 3 件商品的统一运费增加额外费用

jquery - 使用 jQuery 模拟悬停

javascript - 滚动后如何在导航栏中创建淡入淡出?

javascript - 在 AJAX 请求中 React useState() 不会改变组件状态

php - 如何使用 Linux 或 PHP 将文件保持在 1000 行?

javascript - 如果 json 对象中的键相同,则替换值

javascript - 传单未将平铺层添加到底部

javascript - AJAX post数据到达ASP.NET Core 2.1.1 Controller 时为空

javascript - 在不打开标签的情况下播放 youtube