Почему я не могу получить доступ к массиву JavaScript в PHP? - PullRequest
0 голосов
/ 05 февраля 2020

Вот код JavaScript:

  <script>      
  var cars = ["Saab", "Volvo", "BMW"];
    $.ajax({ 
   type: "POST", 
   url: "yep.php", 
   data: { 'cars' : cars}, 
   success: function() { 
          alert("Success"); 
    } 
   }); 
  </script>

Вот код PHP:

  <?php
     $myArray = $_POST['cars'];
     var_dump($myArray);
 ?>` 

Он отображает сообщение об успехе, поэтому он означает, что массив был передан php тогда он показывает:

Notice: Undefined index: cars in C:\xampp\htdocs\project\yep.php on line 18
NULL

Почему он возвращает ноль для массива?

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

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

<input type="button" name="button" value="submit">

  <script>      
  var cars = ["Saab", "Volvo", "BMW"];
  $('input[type=button]').click({
      $.ajax({ 
   type: "POST", 
   url: "yep.php", 
   data: { 'cars' : cars}, 
   success: function(data) { 
          alert("Success");
          console.log(data);
          $("body").empty().html('Ajax Response:<br />'+data);
    } 
   }); 
  })
  </script>

 <?php
     $myArray = $_POST['cars'];
     var_dump($myArray);
 ?>` 
1 голос
/ 06 февраля 2020

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

В скрипте:

success: function(data) { 
          alert(data); 
    } 

Это покажет, что возвращается из вызова ajax. От jQuery. ajax do c:

success

Тип: Функция (Все данные, Строка textStatus, jqXHR jqXHR) Функция, вызываемая в случае успешного выполнения запроса. Функция получает три аргумента: данные, возвращаемые с сервера, .....

В php:

<?php 
  if (!isset($_POST['cars'])) {
      echo "Wait for it";
      } 
  else {
      $myArray = $_POST['cars']; var_dump($myArray);
      } 
  ?>

Теперь вы заметите

  1. что в браузере отображается Wait for it вместо сообщения об ошибке
  2. В окне предупреждения вы увидите, что весь вывод из yep.php возвращается , Прокрутите вниз, чтобы увидеть данные, как вы ожидаете.

ИМО, с чего нужно начать - разделить их на два сценария. Первый html, который не включает php. Второй, php, который будет запрошен из скрипта.

1 голос
/ 06 февраля 2020

Допустим, у вас есть куча данных, и вы хотите отправить все один раз, затем вам нужно создать и очистить объект и добавить к нему значения. Это будет иметь место, если по некоторым причинам вы не хотите использовать var form = new FormData(this.form); Например:

<script>      
  var cars = {};
  cars['value1'] = 'Value 1';
  cars['value2'] = 'Value 2';
  cars['value3'] = 'Value 3';

  $.ajax({ 
  type: "POST", 
  url: "yep.php", 
  data: { cars : cars}, 
  success: function(data) { 
      console.log(data); 
  } 
 }); 
</script>

Но ваш случай прост, просто сделайте это так в вашем data:

<script>      
  var cars = ["Saab", "Volvo", "BMW"];

  $.ajax({ 
  type: "POST", 
  url: "yep.php", 
  data: { cars : cars}, 
  success: function(data) { 
      console.log(data); 
  } 
 }); 
</script>

Первый метод является прямым, но этот метод JSON.

в jquery сначала выполните это ...

var array_fields = ["Saab", "Volvo", "BMW"];
var cars = JSON.stringify( array_fields );

Тогда в PHP сделайте это ...

$myArray = json_decode($_POST['cars']);
print_r($myArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...