编码为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);