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?
3 Réponses :
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>
$ myArray = $ _POST ['cars'];
utilisez plutôt ceci et vérifiez print_r ($ myArray);
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); ?>`
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
php $ myArray = $ _POST ['cars']; var_dump ($ myArray); ?>
@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 !
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
Attendez-le
s'affiche dans le navigateur, au lieu de l'erreur
message 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.
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?
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é