1
votes

La transmission de données de javascript à PHP via POST ne fonctionne pas

Im essayant d'envoyer un tableau, rempli en utilisant javascript côté client, vers un fichier php dans le backend.

MAIN.JS

Notice: Undefined index: list in D:\127.0.0.1/prog1/final/class/ticket.php on line 2
NULL

TICKET.PHP

<?php
   var_dump(json_decode($_POST['list']));
?>

Et en exécutant cela, j'obtiens ce résultat:

    var list = iterateItems();
  _ajax("https://127.0.0.1/prog1/final/class/ticket.php", list)
  .done(function(list){});
  });
  function _ajax(url,data) {
    var ajax = $.ajax({
      type : "POST",
      datatype : "string",
      url : url,
      data : data
    })
    return ajax;
  }
  
  
  function iterateItems() {
    // array is an array populated in this function, returned to be sent to ticket.php
    return JSON.stringify( array );
  };

Je ne comprends pas pourquoi je reçois un index indéfini. J'ai essayé de googler cela, mais la plupart des réponses semblent indiquer l'utilisation d'une sorte de méthode HTTPS, ce que j'essaie de réaliser via POST. Toute aide sera fortement appréciée. Merci.


6 commentaires

Pouvez-vous donner un exemple des données que vous avez envoyées au backend PHP?


J'ai essayé avec un tableau de JSON, tels que `[{" id ": 1," name ":" product "}, {" id ": 2," name ":" product2 "}]` Et le stringified version `" [{\ "id \": 1, \ n \ "nom \": \ "produit \"}, \ n {\ "id \": 2, \ n \ "nom \": \ "produit2 \ "}]" `Désolé pour plusieurs modifications, des problèmes de formatage


$_POST['lista'] est la a une faute de frappe? Undefined index: list


Oui je suis désolé. Le code est en espagnol à l'origine, en tant que locuteur espagnol, et il a glissé. Sera éditer maintenant. Peut garantir qu'il est cohérent avec le code


Vous devrez peut-être définir l'en Content-Type tête Content-Type correct.


Peut-être que je manque quelque chose à propos de l'appel _ajax , mais je ne vois pas la list comme un nom de variable à envoyer. Vous envoyez la valeur de la variable javascript "list" ( iterateItems() ), mais pas le nom de la variable. Ergo, l'index «liste» n'est pas défini. Pour déboguer, tout ce que vous avez à faire est print_r($_POST) et vous verrez (espérons-le) vos données, probablement sans avoir besoin de json_decode ()


3 Réponses :


0
votes

Le problème non défini de «liste» peut être dû à la structure du tableau JSON que vous passez.

Essayez le code ci-dessous et vérifiez s'il fonctionne. Sinon, vérifions plus loin :)

<?php

   var_dump(json_decode($_POST['list']));

Votre code PHP:

    var list = {'list': iterateItems()};
  _ajax("https://127.0.0.1/prog1/final/class/ticket.php", list)
  .done(function(list){});
  });
  function _ajax(url,data) {
    var ajax = $.ajax({
      type : "POST",
      datatype : "json",
      url : url,
      data : data
    })
    return ajax;
  }
  
  
  function iterateItems() {
    // array is an array populated in this function, returned to be sent to ticket.php
    return JSON.stringify( array );
  };


0 commentaires

-1
votes

après avoir appelé var list = iterateItems(); ajoutez cette list = 'list=' + list; le fichier php reconnaîtrait alors la liste d'index.


0 commentaires

0
votes

PHP ne peut pas analyser les paramètres JSON automatiquement. $_POST ne sera renseigné qu'à partir d'une chaîne encodée en URL ou d'un objet FormData.

$.ajax encodera automatiquement un tableau en URL pour vous.

_ajax("https://127.0.0.1/prog1/final/class/ticket.php", array)
  .done(function(list) {});

function _ajax(url, data) {
  var ajax = $.ajax({
    type: "POST",
    dataType: "string",
    url: url,
    data: {list: data}
  })
  return ajax;
}

En PHP, vous n'avez alors pas besoin d'appeler json_decode() . La valeur de $_POST['list'] sera le tableau.


0 commentaires