ErrorException: Undefinierter Array-Schlüssel „Name' in der Datei
P粉187677012
2023-08-31 10:33:00
<p>Ich arbeite an einem Kundenmanagementsystem, das auch Kundenbestellungen verfolgt. Ich habe eine CRUD-API eingerichtet, um das Lesen und Schreiben von Daten aus der Backend-Datenbank zu verarbeiten, aber wenn ich versuche, die Warenkorbdaten in die Datenbank zu posten, erhalte ich die folgende Fehlermeldung. </p>
<blockquote>
<p>quote Fehler beim Parsen von JSON aus der Antwort: SyntaxError: Unexpected token '<', " is not valid JSON</p>
<p>Folgendes wurde anstelle von gültigem JSON empfangen: <!-- ErrorException: undefinierter Array-Schlüssel
„Name“ in der Datei
C:UsersmjverOneDriveDocumentsCodingclient-apiroutesapi.php auf
Zeile 238</p>
</blockquote>
<p>Ich habe die Eingabedaten im Array $data["name"] des Clients überprüft und sehe keine Fehler. Ich habe nach Rechtschreibfehlern und Rechtschreibfehlern und so weiter gesucht und hoffe, dass ein paar frische Augen helfen können.</p>
<p>我的前后端代码片段如下:</p>
<p>调用api.js中的API调用函数:</p>
<pre class="brush:php;toolbar:false;">async sendOrder(){
console.log(this.cart);
const order = waiting APIController.CreateOrder(this.cart.name, this.cart.qty, this.cart.option, this.cart.price, this.orderNum, this.cart.fee, this.cart.date, this. Ausweis);
if(order){
store.dispatch('clearCart');
}
},</pre>
<p>api.js 文件中的 API-Version:</p>
<pre class="brush:php;toolbar:false;">CreateOrder: (Name, Menge, Option, Preis, Bestellnummer, Gebühr, Datum, Benutzer-ID) => {
let ResponseClone;
const csrfToken = document.cookie.match(/XSRF-TOKEN=([^;]+)/)[1];
Wenn(
Name == "" ||
Menge == "" ||
option == "" ||
Preis == "" ||
orderNo == "" ||
Datum == "" ||
userId == ""
) {
falsch zurückgeben;
} anders {
return fetch(API_BASE + "/orders/create", {
Methode: "POST",
Überschriften: {
„Content-Type“: „application/json“,
„X-CSRF-TOKEN“: csrfToken
},
body: JSON.stringify({ name, qty, option, price, orderNo, fee, date, userId })
}).then((response) => {
ResponseClone = Response.clone();
return Response.json()
})
.then(data => {
if(data.success){
Alert("Bestellung erfolgreich erstellt!")
return true;
} anders {
throw data.response.error;
}
}, (rejectionReason) => {
console.log('Fehler beim Parsen von JSON aus der Antwort: ', RejectionReason, ResponseClone);
ResponseClone.text()
.then((bodyText) => {
console.log('Folgendes wird anstelle von gültigem JSON empfangen: ', bodyText);
});
}).catch(err => {
alarm(err);
});
}
},</pre>
<p>api.php 文件中的 PHP-Version:</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 = Bestellungen::create([
"Name" => $data["name"],
"Menge" => $data["menge"],
"Option" => $data["Option"],
"BestellNr" => $data["orderNo"],
„Benutzer-ID“ => $data["userId"],
„Preis“ => $data["Preis"],
„Gebühr“ => $data["Gebühr"],
"Datum" => $data["Datum"],
]);
if(empty($order->id)){
zurückkehren [
„Erfolg“ => FALSCH,
„Antwort“ => [
"Fehler" => „Es ist ein ungewöhnlicher Fehler aufgetreten“
]
];
} anders {
zurückkehren [
„Erfolg“ => WAHR,
„Antwort“ => [
"bestellen" => $bestellen
]
];
}
} anders {
zurückkehren [
„Erfolg“ => FALSCH,
„Antwort“ => [
"Fehler" => „Der Inventarartikel existiert bereits“
]
];
}
});</pre>
<p>我的订单模型文件:</p>
<pre class="brush:php;toolbar:false;">class Orders erweitert das Modell
{
benutze HasFactory;
protected $fillable = [
'Produkt',
'Menge',
'Möglichkeit',
'Best.-Nr',
'Benutzer-ID',
'Preis',
'Gebühr',
'Datum',
];
öffentliches Funktionsprodukt (){
return $this->hasMany(Product::class);
}
}</pre>
<p>
我设法弄清楚了。我 console.log(this.cart.name) 并发现它是“未定义”。经过进一步调查,我发现原因是 state.cart 是一个对象数组,而不仅仅是一个对象。当然,原因是购物车中的每个单独的商品都应该是它自己的对象。所以我的解决方案是:
分解:由于 this.cart 是一个数组而不是一个对象,我必须首先使用 for 循环来获取购物车中每个项目的索引,然后调用将数据发布到数据库的函数。