ErrorException : clé de tableau non définie "nom" dans le fichier
P粉187677012
P粉187677012 2023-08-31 10:33:00
0
1
508
<p>Je travaille sur un système de gestion client qui suit également les commandes des clients. J'ai configuré une API CRUD pour gérer la lecture et l'écriture des données de la base de données principale, mais lorsque j'essaie de POSTER les données du panier dans la base de données, j'obtiens l'erreur suivante. </p> <blockquote> <p>quote Erreur lors de l'analyse du JSON à partir de la réponse : SyntaxError : Jeton inattendu '<', " n'est pas un JSON valide</p> <p>Reçu le message suivant au lieu d'un JSON valide : <!-- ErrorException : clé de tableau non définie "nom" dans le fichier C:UsersmjverOneDriveDocumentsCodingclient-apiroutesapi.php sur Ligne 238</p> </blockquote> <p>J'ai vérifié les données d'entrée dans le tableau $data["name"] du client et je ne vois aucune erreur. J'ai vérifié les fautes d'orthographe et tout ça, et j'espère qu'un regard neuf pourra m'aider.</p> <p>我的前后端代码片段如下:</p> <p>调用api.js中的API调用函数:</p> <pre class="brush:php;toolbar:false;">async sendOrder(){ console.log(this.cart); const order = wait APIController.CreateOrder(this.cart.name, this.cart.qty, this.cart.option, this.cart.price, this.orderNum, this.cart.fee, this.cart.date, this. identifiant); si(commande){ magasin.dispatch('clearCart'); } },</pré> <p>api.js 文件中的 API 调用:</p> <pre class="brush:php;toolbar:false;">CreateOrder : (nom, quantité, option, prix, numéro de commande, frais, date, ID utilisateur) => { laissez réponseClone ; const csrfToken = document.cookie.match(/XSRF-TOKEN=([^;]+)/)[1]; si( nom == "" || quantité == "" || option == "" || prix == "" || N°commande == "" || date == "" || IDutilisateur == "" ) { renvoie faux ; } autre { return fetch(API_BASE + "/orders/create", { méthode : "POST", en-têtes : { "Content-Type": "application/json", "X-CSRF-TOKEN": csrfToken }, corps : JSON.stringify({ nom, quantité, option, prix, numéro de commande, frais, date, ID utilisateur }) }).then((réponse) => { réponseClone = réponse.clone(); renvoyer la réponse.json() }) .then(données => { si(données.succès){ alert("Commande créée avec succès !") renvoie vrai ; } autre { lancer data.response.error ; } }, (raison du rejet) => { console.log('Erreur lors de l'analyse du JSON à partir de la réponse : ',rejectionReason,responseClone); réponseClone.text() .then((bodyText) => { console.log('Recevoir ce qui suit au lieu d'un JSON valide : ', bodyText); }); }).catch(erreur => { alerte (erreur); }); } },</pré> <p>api.php 文件中的 php 路由:</p> <pre class="brush:php;toolbar:false;">Route::post('/orders/create', function(Request $request){ $data = $request->all(); if(!Orders::where('orderNo', '=', $data['orderNo'])->exists()){ $order = Commandes::create([ "nom" => $data["nom"], "quantité" => $données["quantité"], "option" => $données["option"], "Numéro de commande" => $data["numéro de commande"], "IDutilisateur" => $data["userId"], "prix" => $données["prix"], "frais" => $data["frais"], "date" => $données["date"], ]); si(vide($commande->id)){ retour [ "succès" => FAUX, "réponse" => [ "erreur" => "Une erreur inhabituelle s'est produite" ] ]; } autre { retour [ "succès" => vrai, "réponse" => [ "commander" => $commande ] ]; } } autre { retour [ "succès" => FAUX, "réponse" => [ "erreur" => "L'article en stock existe déjà" ] ]; } });</pré> <p>我的订单模型文件:</p> <pre class="brush:php;toolbar:false;">class Orders étend le modèle { utilisez HasFactory ; protégé $remplissable = [ 'produit', 'quantité', 'option', 'n ° de commande', 'ID de l'utilisateur', 'prix', 'frais', 'date', ]; produit de fonction publique (){ return $this->hasMany(Product::class); } }</pré> <p> gt;
P粉187677012
P粉187677012

répondre à tous(1)
P粉543344381

J'ai réussi à comprendre. J'ai console.log(this.cart.name) et je l'ai trouvé "indéfini". Après une enquête plus approfondie, j'ai découvert que la raison en est que state.cart est un tableau d'objets, pas seulement un objet. La raison, bien sûr, est que chaque article du panier doit être son propre objet. Ma solution est donc :

for(let i = 0; i <= this.cart.length - 1; i++){
                try {
                    const order = await APIController.CreateOrder(this.cart[i].name, this.cart[i].qty, this.cart[i].option, this.cart[i].price, this.orderNum, this.cart[i].fee, this.cart[i].date, this.id);
                    if(order){
                        this.clearCart();
                    }
                } catch (error){
                    console.log(error);
                }
            }

Décomposition : puisque this.cart est un tableau et non un objet, je dois d'abord utiliser une boucle for pour obtenir l'index de chaque élément du panier, puis appeler une fonction qui publie les données dans la base de données.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!