我遇到一个奇怪的问题,无法解决。
这是我所知道的:
- responseText在Chrome的控制台中显示了3个对象 (最新版本)。 Edge和IE也是如此。
- responseJSON仅显示2
- console.dir(data)时,数据对象仅显示2行
- JSON似乎是正确的,并已由jsonformatter.com确认
任何转换JSON字符串的操作都会切断最后一个记录/数组元素。
我有一个来自PHP脚本的JSON字符串:
{
"rows":[
{
"fullname":"Christine B","ask_amount":"500"
},{
"fullname":"John T","ask_amount":"700"
},{
"fullname":"Kasia S","ask_amount":"350"
}
],"stats":{
"ask_total":"6900","ask_count":"15","ask_highest":"1000.00","asksettings_goal":"5000","last":"2020-04-18 03:08:38"
}
}
此功能:
function refreshstats() {
$.ajax({
type: 'POST',url: "functions.php",dataType: "json",data: {
function: "stats",lastquery: lastquery,key: key
},error: function (data) {
console.dir(data)
}
}).done(function (data,textStatus,jqXHR) {
console.dir(jqXHR) //
console.dir(data.rows) // <- this shows only two records
})
}
jqXHR的控制台:
{"rows":[{"fullname":"Christine B","ask_amount":"500"},{"fullname":"John T","ask_amount":"700"},{"fullname":"Kasia S","ask_amount":"350"}],"stats":{"ask_total":"6900","last":"2020-04-18 03:13:38"}}
根据jsonformatter,上述JSON有效。
$ rows结果来自MariaDB数组计数3 $ askstats对象来自MariaDB查询的第一个数组结果。
PHP代码:
$db = new Db();
$query = "SELECT ROUND(SUM(ask_amount),0) ask_total,COUNT(ask_id) ask_count,MAX(ask_amount) ask_highest,asksettings_goal,NOW() last FROM AskSettings ASKS LEFT JOIN Asks ASK ON ASKS.event_id = $event_id AND ASK.event_id = $event_id WHERE ask_confirmed=1";
$askstats = $db->select( $query )[0];
$db = new Db();
$query = "SELECT IF(ask_anonymous=1,'Anonymous',concat(account_firstname,' ',account_lastname)) fullname,FORMAT(ask_amount,0) ask_amount FROM Asks ASK,accounts A,AskSettings ASKS WHERE A.account_id = ASK.account_id AND ASKS.event_id = $event_id AND ASK.event_id = $event_id AND ask_timestamp >= '$lastquery' AND ask_confirmed=1 ORDER BY ask_timestamp";
$rows = $db->select( $query );
$arr = array( "rows" => $rows,"stats" => $askstats );
echo json_encode( $arr );
我尝试使用直接的脚本和相同的结果。
任何见识将不胜感激。