response JSON не совпадает с responseText. Отрезает последний элемент массива - PullRequest
0 голосов
/ 18 апреля 2020

У меня странная проблема, которую я не могу понять.

Вот что я знаю:

  • responseText имеет 3 объекта, показанных на консоли в Chrome (последняя версия). Это также верно для Edge и IE.
  • ответ JSON показывает только 2
  • Объект данных показывает только 2 строки, когда console.dir (data)
  • JSON кажется правильным и подтвержденным jsonformatter.com

Независимо от преобразования строки JSON обрезается последняя запись / элемент массива.

У меня есть JSON строка из PHP скрипта:

{
   "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","ask_count":"15","ask_highest":"1000.00","asksettings_goal":"5000","last":"2020-04-18 03:13:38"}}

Согласно jsonformatter приведенное выше значение JSON является действительным.

$ набор результатов строк из числа массивов 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 );

Я пытался использовать прямой javscript и те же результаты.

Любое понимание будет с благодарностью.

...