编码为JSON的PHP AJAX数组在HTML表中不按顺序显示,但在仅执行MySQL查询时按顺序显示

编码为JSON的PHP AJAX数组在HTML表中不按顺序显示,但在仅执行MySQL查询时按顺序显示,php,jquery,mysql,json,ajax,Php,Jquery,Mysql,Json,Ajax,我有一个MySQL查询,其中行按照ASC根据month和year进行排序: SELECT CONCAT(MONTHNAME(diabetes_assessment.date_of_assessment), ' - ', YEAR(diabetes_assessment.date_of_assessment)) as assessmentDate, MONTHNAME(diabetes_assessment.date_of_assessment) as monthNameAsses

我有一个
MySQL
查询,其中行按照
ASC
根据
month
year
进行排序:

SELECT
    CONCAT(MONTHNAME(diabetes_assessment.date_of_assessment), ' - ', YEAR(diabetes_assessment.date_of_assessment)) as assessmentDate,
    MONTHNAME(diabetes_assessment.date_of_assessment) as monthNameAssessment,
    YEAR(diabetes_assessment.date_of_assessment) as yearAssessment, 
    MONTH(diabetes_assessment.date_of_assessment) as monthAssessment, 
    AVG(diabetes_assessment.assessment_result) as avgAssessment
FROM 
    diabetes_assessment
WHERE
    diabetes_assessment.clinic_id = '361'
group by 
    MONTH(diabetes_assessment.date_of_assessment), 
    YEAR(diabetes_assessment.date_of_assessment)
ORDER BY yearAssessment, monthAssessment ASC
结果与中显示的结果类似,行正确显示并排序
ASC

| assessmentDate | monthNameAssessment | yearAssessment | monthAssessment | avgAssessment |
|----------------|---------------------|----------------|-----------------|---------------|
|   March - 2016 |               March |           2016 |               3 |          40.5 |
|   April - 2016 |               April |           2016 |               4 |            45 |
|   April - 2017 |               April |           2017 |               4 |            31 |
|     May - 2017 |                 May |           2017 |               5 |            40 |
现在我复制了一些列,因为我将在
chartJs
中使用它们来显示一些图表。无论如何,当我使用PHP对行进行编码并通过AJAX发送它们并在html表中显示它们时:

$cid = $_SESSION['clinic_id'];
$arrayResult = array();
$getAverage = "
SELECT
    CONCAT(MONTHNAME(diabetes_assessment.date_of_assessment), ' - ', YEAR(diabetes_assessment.date_of_assessment)) as assessmentDate,
    MONTHNAME(diabetes_assessment.date_of_assessment) as monthNameAssessment,
    YEAR(diabetes_assessment.date_of_assessment) as yearAssessment, 
    MONTH(diabetes_assessment.date_of_assessment) as monthAssessment, 
    AVG(diabetes_assessment.assessment_result) as avgAssessment
FROM 
    diabetes_assessment
WHERE
    diabetes_assessment.clinic_id = :cid
group by 
    MONTH(diabetes_assessment.date_of_assessment), 
    YEAR(diabetes_assessment.date_of_assessment)
ORDER BY 
    yearAssessment, 
    monthAssessment ASC";

$execGetAverage = $conn->prepare($getAverage);
$execGetAverage->bindValue(':cid', $cid);
$execGetAverage->execute();
$result = $execGetAverage->fetchAll();

$i=0;
foreach($result as $res)
{
    $arrayResult[$i] = $res;
    $i++;
}

echo json_encode($arrayResult);
这里是Ajax脚本:

$.ajax({
        url: '../php/getAssessmentResultByMonth.php',
        dataType: 'JSON',
        success:function(resp)
        {
            $.each(resp, function(key, result)
            {
                $("#after_tr").after("<tr><td>"+result['assessmentDate']+"</td><td>"+result['avgAssessment']+"</td></tr>")
            });
        },
        error:function(resp)
        {
            console.log(resp);
        }
})

要保留原始顺序,请在php中在数组中生成数组

像这样改变

foreach($result as $res)
{
    $arrayResult[$i][] = $res;
    $i++;
}

echo json_encode($arrayResult);

javascript不在对象中维护orders属性,因此html表不按排序顺序显示的原因不起作用可以在arrayall arays中生成数组后显示最终json was
未定义
未定义
undefined
console.log(resp)并查看您得到了什么
foreach($result as $res)
{
    $arrayResult[$i][] = $res;
    $i++;
}

echo json_encode($arrayResult);