1
votes

Pourquoi ne puis-je pas accéder au tableau JavaScript en PHP?

Voici le code JavaScript:

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

Voici le code PHP:

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

Il affiche un message de réussite, donc cela signifie array a été passé à php puis il montre:

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

Pourquoi renvoie-t-il null pour le tableau?


11 commentaires

Vous avez affiché 4 lignes de code PHP, mais vous avez indiqué que l'erreur se trouve à la ligne 18.


peut-être devriez-vous d'abord essayer de déboguer votre code vous-même; pourquoi var_dump sur $ myArray et pas sur $ _POST ? peut-être que votre tableau js n'est jamais publié


votre code javascript et php est dans le même fichier? si oui, mettez votre code php dans une vérification comme if (isset ($ _ POST ['cars'])) {$ myArray = $ _POST ['cars']; var_dump ($ myArray); mourir;}


@uditrawat J'ai mis cela dans le code, puis cela n'a donné qu'un message de succès et rien d'autre ne signifie que la condition if était fausse, donc le tableau js n'a pas été envoyé à php


@GregSchmidt Je n'ai pas publié de balises html et head. J'ai écrit tout ce code dans un fichier yep.php, la ligne 18 est $ myArray = $ _POST ['cars'];


@Pierre si le tableau js n'est jamais publié, il n'aurait pas donné de message de réussite


si tu le dis...


Quel est le type de contenu dans l'en-tête de la requête POST à ​​yep.php? Vous devriez pouvoir le voir dans la console du navigateur, onglet Réseau. Vous pouvez obtenir ce résultat si le Content-Type n'est pas application / x-www-form-urlencoded .


@DinoCoderSaurus Si cela ne vous dérange pas, pouvez-vous élaborer


{cars: cars}, sans guillemets


@Roy n'a pas fonctionné


3 Réponses :


1
votes

Disons que vous avez un tas de données et que vous voulez les soumettre une seule fois, alors vous devez créer et vider un objet et y ajouter des valeurs. Ce sera le cas si, pour certaines raisons, vous ne souhaitez pas utiliser var form = new FormData (this.form); Par exemple:

$myArray = json_decode($_POST['cars']);
print_r($myArray);

Mais votre cas est simple, faites-le comme ceci dans vos data:

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

La première est la méthode directe, mais celle-ci est la méthode JSON.

dans jquery, faites d'abord ceci ...

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

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

Puis en PHP faites ceci ...

<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>


1 commentaires

$ myArray = $ _POST ['cars']; utilisez plutôt ceci et vérifiez print_r ($ myArray);



2
votes

Je pense que vous ne déclenchez aucun événement tel que l'événement de clic, essayez ce code et dites-moi s'il fonctionne ou non pour vous.

<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);
 ?>` 


7 commentaires

Cela ne fonctionne pas, il ne donne même pas d'alerte, donc probablement le tableau n'est pas passé de js à php, sa sortie en tant que Remarque: Index non défini: voitures dans C: \ xampp \ htdocs \ project \ firstprogram.php à la ligne 26 qui est $ myArray = $ _POST ['voitures']; NUL



@Amateur le code fourni dans cette réponse est correct, vous affichez par contre une erreur d'un autre fichier, firstprogram.php . Si vous souhaitez que les voitures soient disponibles dans firstprogram.php , vous devez inclure ce fichier dans yep.php . FYI PHP est exécuté UNE FOIS (par requête) et tout ce qui est inclus dans le fichier principal est traité de manière synchrone.


@Amateur var_dump ($ myArray) n'apparaîtra pas dans la fenêtre de votre navigateur. Pour voir le résultat, ouvrez Outils de développement depuis votre navigateur, sélectionnez l'onglet Réseau , cliquez sur la demande à /yep.php puis cliquez sur l'onglet Réponse


@darklightcode si je veux l'imprimer à l'écran en utilisant PHP, que puis-je faire? var_dump () n'est généralement pas utilisé pour imprimer à l'écran?


vous devez recevoir une réponse du backend en fonction de succès d'ajax et pouvez afficher sur la page Web ou la console, les balises d'alerte et html (en utilisant la fonction append, prepend, etc. de jquery)


@Amateur Non, PHP ne sait pas / se soucie si vous avez un écran ou non, var_dump , print_r , echo , sprintf w / e, peut être utilisé pour sortir le contenu évalué, dans votre cas, le serveur Web agit comme un intermédiaire, il envoie la demande du client (navigateur) à PHP, puis il est traité et il peut ou non produire une sortie qui sera renvoyée au client qui a fait la demande. Lorsque vous effectuez des requêtes en utilisant Ajax , les requêtes sont envoyées en parallèle, considérez-les comme des requêtes cachées, vous n'avez pas besoin d'actualiser / soumettre le navigateur pour une nouvelle sortie. Bonne chance !



1
votes

Le message d'erreur arrive avant même que le script ne soit exécuté ! Suggérez deux petits changements pour que vous puissiez voir ce qui se passe.

Dans le script:

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

Cela montrera ce qui est retourné par l'appel ajax. Depuis le jQuery.ajax doc :

Type: Fonction (Anything data, String textStatus, jqXHR jqXHR ) Une fonction à appeler si la requête aboutit. La fonction obtient passé trois arguments: Les données renvoyées par le serveur, .....

Dans le php:

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

Vous remarquerez maintenant

  1. Que Attendez-le s'affiche dans le navigateur, au lieu de l'erreur message
  2. Dans la boîte d'alerte, vous verrez la sortie complète de yep.php est renvoyé. Faites défiler vers le bas pour voir les données comme prévu.

À l'OMI, le point de départ est de diviser cela en deux scripts. Le premier un html qui n'inclut pas le php. Le second, le php qui sera demandé au script.


2 commentaires

Après avoir apporté les modifications ci-dessus, il affiche le code entier, sauf la partie php dans le message d'alerte. Divisez cela en deux scripts, ce qui signifie créer deux fichiers, un avec l'extension .html et un avec l'extension .php que j'ai fait, mais après cela, à l'ouverture du fichier html, il était vide, dans la console du navigateur> Réseau> yep.php, le chargement a échoué données de réponse


J'ai copié le code d'un commentaire publié ci-dessus. J'ai dû changer la ligne . À l'exception de cette ligne, j'ai divisé le code exact en un html (yep.html) et un php (yep.php). J'ai navigué vers yep.html dans Firefox. Et obtenu les données de réponse attendues. Le serveur Web local est IIS. L'ouverture du fichier html sera vide, il n'y a rien à rendre. Avez-vous vérifié la console du navigateur pour les erreurs?