отправить массив из js в php - PullRequest
0 голосов
/ 29 апреля 2019

Я делаю какое-то задание для школы, и я застрял при передаче массива от js к php.

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

Я пытаюсь вот так.

 if(bets.length > 0) {
    $.ajax({ 
       url: "mybet.php", 
       method: "POST", 
       data: { bets : JSON.stringify( bets ) }, 
       success: function(res) { 
              console.log(res);
        } 
    }); 
  }

и php файл

if (isset($_POST['bets'])) {
  $bets = json_decode($_POST['bets'], true);
  print_r($bets);

}

делает ставку на массив в js ... и я хочу, еслиЯ нажимаю кнопку продолжить, чтобы собрать этот массив и перейти к php, чтобы я мог работать с ним.Я получаю неопределенный индекс для ставок по линии $bets = json_decode($_POST['bets']);

print_r($_POST) пусто

Ответы [ 3 ]

0 голосов
/ 30 апреля 2019

Привет, вот пример, который я сделал для вас:

сначала html-часть - это простой модал для отображения данных из request.php, если данные, которые я отправляю из моего массива js, в порядке:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script
    src="http://code.jquery.com/jquery-3.3.1.min.js"
    integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
    crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
  </head>
  <body>
    <div class="container">
    <h2>Modal Example</h2>
    <!-- Button to Open the Modal -->
    <button type="button" class="btn btn-primary" id="btnDisplayModal" >
      Open modal
    </button>

    <!-- The Modal -->
    <div class="modal" id="myModal">
      <div class="modal-dialog">
        <div class="modal-content">

          <!-- Modal Header -->
          <div class="modal-header">
            <h4 class="modal-title">Modal Heading</h4>
            <button type="button" class="close" data-dismiss="modal" >&times;</button>
          </div>

          <!-- Modal body -->
          <div class="modal-body">
          <br>
          <div id="add-takeout-messages">

          </div>
          </div>

          <!-- Modal footer -->
          <div class="modal-footer">
            <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
          </div>

        </div>
      </div>
    </div>

  </div>
  </body>

часть javascript представляет собой ajax-вызов, который отображает данные внутри модального окна после выполнения запроса:

$(document).ready(function() {
  var formData = {id:"1",name:"stan",lastname:"chacon",color:"blue"};
  function _ajaxMessage(formData){

  return $.ajax({
        url: "request.php",
        type: 'POST',
        data:{data:JSON.stringify(formData)},
        dataType: 'json'
      })

  }


  $("#btnDisplayModal").on('click', function(){
    _ajaxMessage(formData)
    .done(function(response){
      console.log(JSON.stringify(response));
      $('#add-takeout-messages').empty();
      $.each(response.messages,function(index,value){
        console.log(index,value);
      $('#add-takeout-messages').append('<div class="alert alert-success">' +
        '<button type="button" class="close" data-dismiss="alert">&times;</button>' +
        '<strong><i class="glyphicon glyphicon-ok-sign"></i></strong> From: '+ value.from + '<br>' +  ' msg: ' + value.msg +
        '</div>')
      })
      $("#myModal").modal();
    })
  })

})

Файл request.php прост, как и файл запроса, который вы уже используете, поэтому, я думаю, проблема в том, что у вас есть массив, возможно, он имеет неправильный формат и поэтому он пуст.

if (isset($_POST["data"])) {
  $data = json_decode($_POST["data"],true);
  if ($data["name"] == "stan") {
    $array = [
      "status"=>"success",
      "messages"=>  [
        array('date' => "2019-04-11", 'msg'=>'Love you', 'from'=>'Annie' ),
        array('date' => "2019-04-10", 'msg'=>'Have a nice day', 'from'=>'Annie' )
      ]

    ];
    echo json_encode($array);
  }
}

проверьте ваш массив и сообщите нам, если это было проблемой =)

Hiope помогает

0 голосов
/ 30 апреля 2019

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

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    let bets = [1,2,3]; // This must come dynamically.
    if(bets.length > 0) {
        $.ajax({url: "server.php", method: "POST",  data: { bets : JSON.stringify( bets) }, success: function(result){
            $("#div1").html(result);
        }});
    }
  });
});
</script>
</head>
<body>

<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div>

<button>Send Ajax Request</button>

</body>
</html>

Серверная сторона

<?php 
if (isset($_POST['bets'])) {
    $bets = json_decode($_POST['bets'], true);
    print_r($_POST['bets']);

}
0 голосов
/ 29 апреля 2019

Вы не отправляете переменную continueBet в своем запросе ajax, либо отправляете эту переменную, изменяя данные следующим образом:

if(bets.length > 0) {
    $.ajax({ 
       url: "mybet.php", 
       method: "POST", 
       data: { bets : JSON.stringify( bets ), proceedBet: 'Some Value' }, 
       success: function(res) { 
              console.log(res);
        } 
    }); 
  }

Или вам нужно изменить свое условие, чтобы проверить, сделаны ли ставкисуществует так:

if (isset($_POST['bets'])) {
  $bets = json_decode($_POST['bets'], true);
  print_r($_POST['bets']); // use print_r to check the data in the array
  //  User::redirect("ticket.php");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...