значения не сохраняются по одному в массиве после каждого нажатия кнопки - PullRequest
0 голосов
/ 15 ноября 2018

Я пытался собрать программу и получил проблему сохранения данных в массив после каждого нажатия кнопки. После каждого клика я отправляю некоторые данные через ajax на страницу php и хочу сохранить все отправленные данные в массиве и позже отобразить их в табличном формате.

Я проверил в консоли элемент inspect, и проблема в том, что он всегда перезаписывает старое значение в массиве новым значением. Я не понимаю, где я не прав. если кто-то, пожалуйста, помогите мне, окажет большую помощь.

$(document).ready(function() {
  $("#feed_btn").hide();
  $("#finish_btn").hide();

  $("#start_btn").click(function() {
    $("#start_btn").hide();
    $("#feed_btn").show();
  });
});

var i = 0;

function PerformGame() {
  i++;
  $.ajax({
    url: 'perform_game.php',
    type: "POST",
    data: {
      'button_clicked': i
    },
    dataType: 'json',
    success: function(data) {
      alert(data);
    }
  });
}
.game-body {
  background-color: AED264;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form name="farm_game" method="POST">
  <button type="button" name="start_btn" id="start_btn">Start Game !</button>
  <button type="button" name="feed_btn" id="feed_btn" onclick="PerformGame();">Let's Feed Now</button>
  <button type="button" name="finish_btn" id="finish_btn">Finish Game !</button>
</form>
<?php
  $no_of_times_button_clicked = $_POST['button_clicked'];
  $animal_person_array = array(Farmer,Cow1,Cow2,Bunny1,Bunny2,Bunny3,Bunny4);
  $a = $animal_person_array[array_rand($animal_person_array,1)];

  $final_result_array[] = array($no_of_times_button_clicked => $a);

  echo json_encode($final_result_array);
?>

1 Ответ

0 голосов
/ 15 ноября 2018

Это не работает, потому что каждый раз, когда вы делаете вызов AJAX, вы запускаете новый экземпляр сценария PHP, который не знает о других вызовах.

У вас есть несколько вариантов:

  • Сохранить предыдущие записи массива в сеансе сервера
  • Сохранить предыдущие записи массива в БД
  • Соберите все данные о кнопках на стороне клиента (в Java Script) и отправьте весь массив в ваш PHP-скрипт

Для вашего случая я бы порекомендовал сеанс сервера .

Вот пример кода (непроверенный) с элементарной обработкой сеанса:

<?php
  session_start();

  if ($_POST['start_game'] !== null)
  {
      $_SESSION['final_result_array'] = [];
      die();
  }

  $final_result_array = isset($_SESSION['final_result_array'])
      ? $_SESSION['final_result_array']
      : [];

  $no_of_times_button_clicked = $_POST['button_clicked'];
  $animal_person_array = array("Farmer","Cow1","Cow2","Bunny1","Bunny2","Bunny3","Bunny4");
  $a = $animal_person_array[array_rand($animal_person_array,1)];

  $final_result_array[] = array($no_of_times_button_clicked => $a);

  echo json_encode($final_result_array);

  $_SESSION['final_result_array'] = $final_result_array;
?>

Важно: Вам необходимо повторно инициализировать массив при каждом запуске игры, или он будет продолжать добавляться к нему. Для этого достаточно вызвать скрипт с параметром start_game = true при нажатии на кнопку start_game.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...