每次单击按钮后,值不会一一地存储在数组中

时间:2018-11-15 15:44:44

标签: javascript php jquery ajax

我试图构建一个程序,但是每次单击按钮后都遇到将数据存储到数组中的问题。每次单击后,我将通过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 :(得分:4)

这不起作用,因为每次您进行AJAX调用时,您都会启动一个新的PHP脚本实例,该实例不知道其他调用。

您有两种选择:

  • 将先前的数组条目存储在服务器会话中
  • 将先前的数组条目存储在数据库中
  • 在Java脚本中收集有关客户端按钮的所有数据,并将整个数组发送到您的PHP脚本

对于您的情况,我建议您使用server session

以下是具有基本会话处理的示例代码(未经测试):

<?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调用脚本即可。