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.
3 Réponses :
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 ); };
après avoir appelé var list = iterateItems();
ajoutez cette list = 'list=' + list;
le fichier php reconnaîtrait alors la liste d'index.
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.
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 laa
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êteContent-Type
correct.Peut-être que je manque quelque chose à propos de l'appel
_ajax
, mais je ne vois pas lalist
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 estprint_r($_POST)
et vous verrez (espérons-le) vos données, probablement sans avoir besoin de json_decode ()