【问题标题】:PHP AJAX array encoded to JSON is not displayed sorted in HTML table but it is displayed sorted in when only MySQL query is executed编码为 JSON 的 PHP AJAX 数组未在 HTML 表中排序显示,但仅在执行 MySQL 查询时显示排序
【发布时间】:2017-08-09 06:09:11
【问题描述】:

我有这个MySQL 查询,其中行根据monthyearASC 排序:

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

结果类似于this SQL Fiddle 中显示的结果,并且行正确显示并排序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);
        }
})

现在 HTML 表格中的结果未显示已排序的行:

| assessmentDate | monthNameAssessment | yearAssessment | monthAssessment | avgAssessment |
|----------------|---------------------|----------------|-----------------|---------------|
|   March - 2016 |               March |           2016 |               3 |          40.5 |
|   April - 2017 |               April |           2017 |               4 |            31 |
|   April - 2016 |               April |           2016 |               4 |            45 |
|     May - 2017 |                 May |           2017 |               5 |            40 |

【问题讨论】:

  • javascript 不会在对象中维护订单属性,这会导致您的 html 表格未按排序顺序显示

标签: php jquery mysql json ajax


【解决方案1】:

在php中保留原顺序make array inside array

这样改

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

echo json_encode($arrayResult);

【讨论】:

  • 在数组中创建数组后无法显示最终的json
  • 所有数组都是undefined undefined ... undefined
  • console.log(resp) 看看你得到了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2011-04-17
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
相关资源
最近更新 更多