在Javascript中用Javascript加两个数字的结果在apache上是错误的,但在artisan服务器上则不是

时间:2019-04-29 06:34:06

标签: javascript reactjs apache laravel-5 ampps

我发现了我正在开发的网站的怪异行为。它是使用Laravel 5.8开发的,并使用React预设来构建所有前端。该项目有一部分统计信息,其中一些需要显示total字段。 当我使用php artisan serve运行我的项目并访问统计信息时,将正确显示和计算结果。当我使用AMPPS在Apache上部署此站点时,就会出现问题。这样做时,总计将作为字符串计算,因此,例如,如果我有一个1+0的总和,而不是得到1,我得到的是10。它将整数连接为字符串。

这是我使用php artisan serve时的结果 This is the result when I'm using the <code>php artisan serve</code>

当我使用apache的时候: And this one when I use apache

这是我的客户代码:

constructor(props) {
    super(props);
    this.statsRoute = 'attendants/classification';
    this.state = {
        barData: {
            labels: [],
            datasets: [
                {
                    backgroundColor: [],
                    borderWidth: 1,
                    hoverBackgroundColor: [],
                    data: []
                }
            ],
            options: {
                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero: true
                        }
                    }]
                },
                legend: {
                    display: false,
                }
            },
            tableRepresentation: {
                header: ['Clasificación', 'Número de Asistentes'],
                rows: []
            }
        },
        // Pie chart data
        pieData: {
            labels: [],
            datasets: [
                {
                    backgroundColor: [],
                    borderWidth: 1,
                    hoverBackgroundColor: [],
                    data: [],
                    total: 0
                }
            ],
            options: {
                legend: {
                    display: true,
                    position: 'bottom',
                },
                tooltips: {
                    callbacks: {
                        label: function (tooltipItem, data) {
                            let dataset = data.datasets[tooltipItem.datasetIndex];
                            let currentValue = dataset.data[tooltipItem.index].toFixed(2);
                            let label = data.labels[tooltipItem.index];
                            return ` ${label}: ${currentValue}%`;
                        }
                    }
                }
            },
            tableRepresentation: {
                header: ['Clasificación', 'Porcentaje'],
                rows: []
            }
        }
    }
}

componentWillMount() {
    this.props.statService.getStats(this.statsRoute)
        .then(res => {
            let total = 0;
            let barData = this.state.barData;
            let pieData = this.state.pieData;
            let colors = this.props.randomColorService.getArrayOfColors(res.length);

            for ( let i = 0; i < res.length; i++ ) {
                let item = res[i];

                total += item.count;
                barData.tableRepresentation.rows.push([
                    item.classification,
                    item.count
                ]);

                barData.labels.push(item.classification);
                barData.datasets[0].data.push(item.count);
                pieData.datasets[0].data.push(item.count * 100);
            }

            // Assign labels and colors to pie chart
            pieData.labels = barData.labels;
            barData.datasets[0].backgroundColor = colors['withAlfa'];
            barData.datasets[0].hoverBackgroundColor = colors['withoutAlfa'];

            // Assign colors to bar chart
            pieData.datasets[0].backgroundColor = colors['withAlfa'];
            pieData.datasets[0].hoverBackgroundColor = colors['withoutAlfa'];

            for ( let i = 0; i < pieData.datasets[0].data.length; i++ ) {
                pieData.datasets[0].data[i] /= total;
                let value = pieData.datasets[0].data[i];
                pieData.tableRepresentation.rows.push([
                    pieData.labels[i],
                    `${value.toFixed(2)}%`
                ]);
            }

            barData.tableRepresentation.rows.push([
                "",
                `Total: ${total}`
            ]);

            this.setState({
                barData: barData,
                pieData: pieData
            });
        })
        .catch(err => {
            console.log(err);
        });
}

我怀疑这是后端的问题,因为当我执行查询时,我得到了这样的JSON:

{
    "data": [
        {
            "item": "Invitado",
            "count": 6
        },
        {
            "item": "Asistente",
            "count": 7
        }
    ]
}

因此,后端无法获得总计,我在客户端上完成。

为什么仅当我将apache用作服务器时才会发生此行为?

1 个答案:

答案 0 :(得分:0)

尝试将total += item.count;替换为total += +item.count;

+将显式地将其转换为int,现在对于apache版本,数字被视为字符串,并被串联而不是添加。