ErrorException: 파일에 배열 키 'name'이 정의되지 않았습니다.
P粉187677012
2023-08-31 10:33:00
<p>저는 고객 주문도 추적하는 고객 관리 시스템을 개발하고 있습니다. 백엔드 데이터베이스에서 데이터 읽기 및 쓰기를 처리하기 위해 CRUD API를 설정했지만 장바구니 데이터를 데이터베이스에 게시하려고 하면 다음 오류가 발생합니다. </p>
<인용문>
<p>quote 응답에서 JSON을 구문 분석하는 중 오류 발생: SyntaxError: 예기치 않은 토큰 '<', "는 유효한 JSON이 아닙니다</p>
<p>유효한 JSON 대신 다음을 수신했습니다: <!-- ErrorException: 정의되지 않은 배열 키
파일의 "이름"
C:UsersmjverOneDriveDocumentsCodingclient-apiroutesapi.php on
238행</p>
</인용문>
<p>클라이언트의 $data["name"] 배열에 입력 데이터를 검사했는데 오류가 표시되지 않습니다. 나는 철자 오류와 철자 오류 등을 모두 확인했으며 새로운 눈이 도움이 되기를 바랍니다.</p>
<p>나의 이전 작품은 다음과 같습니다</p>
<p>调사용api.js중의 API
<pre class="brush:php;toolbar:false;">async sendOrder(){
console.log(this.cart);
const 주문 = APIController.CreateOrder(this.cart.name, this.cart.qty, this.cart.option, this.cart.price, this.orderNum, this.cart.fee, this.cart.date, this. ID);
if(주문){
store.dispatch('clearCart');
}
},</pre>
<p>api.js 文件中的 API 사용:</p>
<pre class="brush:php;toolbar:false;">CreateOrder: (이름, 수량, 옵션, 가격, 주문 번호, 수수료, 날짜, 사용자 ID) => {
responseClone을 시키십시오;
const csrfToken = document.cookie.match(/XSRF-TOKEN=([^;]+)/)[1];
만약에(
이름 == "" ||
수량 == "" ||
옵션 == "" ||
가격 == "" ||
주문번호 == "" ||
날짜 == "" ||
userId == ""
) {
거짓을 반환;
} 또 다른 {
return fetch(API_BASE + "/orders/create", {
방법: "POST",
헤더: {
"콘텐츠 유형": "application/json",
"X-CSRF-TOKEN": csrfToken
},
본문: JSON.stringify({ 이름, 수량, 옵션, 가격, 주문 번호, 수수료, 날짜, userId })
}).then((응답) => {
responseClone = response.clone();
response.json() 반환
})
.then(데이터 => {
if(데이터.성공){
Alert("주문이 성공적으로 생성되었습니다!")
사실을 반환;
} 또 다른 {
throw data.response.error;
}
}, (rejectionReason) => {
console.log('응답에서 JSON을 구문 분석하는 중 오류가 발생했습니다: ', ReasonReason, responseClone);
responseClone.text()
.then((bodyText) => {
console.log('유효한 JSON 대신 다음을 수신함: ', bodyText);
});
}).catch(err => {
경고(err);
});
}
},</pre>
<p>api.php 文件中的 php 루로由:</p>
<pre class="brush:php;toolbar:false;">Route::post('/orders/create', function($request 요청){
$data = $request->all();
if(!Orders::where('orderNo', '=', $data['orderNo'])->exists()){
$order = 주문::생성([
"이름" => $data["이름"],
"수량" => $data["수량"],
"옵션" => $data["옵션"],
"주문번호" => $data["주문번호"],
"사용자 ID" => $data["사용자 ID"],
"가격" => $data["가격"],
"수수료" => $data["수수료"],
"날짜" => $data["날짜"],
]);
if(empty($order->id)){
반품 [
"성공" => 거짓,
"응답" => [
"오류" => "비정상적인 오류가 발생했습니다"
]
];
} 또 다른 {
반품 [
"성공" => 진실,
"응답" => [
"주문" => $주문
]
];
}
} 또 다른 {
반품 [
"성공" => 거짓,
"응답" => [
"오류" => "인벤토리 항목이 이미 존재합니다"
]
];
}
});</pre>
<p>나의 订单模型文件:</p>
<pre class="brush:php;toolbar:false;">class Orders는 모델을 확장합니다.
{
HasFactory를 사용하세요.
보호된 $fillable = [
'제품',
'수량',
'옵션',
'주문번호',
'사용자 ID',
'가격',
'요금',
'날짜',
];
공공 기능 제품 (){
return $this->hasMany(Product::class);
}
}</pre>
<p>如果您能帮助我解决这个问题,我将不胜感激,因为我已经为此苦苦挣扎了一段时间。</p>
나는 그것을 알아낼 수 있었다. console.log(this.cart.name)를 검색했는데 "정의되지 않음"인 것으로 나타났습니다. 더 자세히 조사한 결과 state.cart가 단지 하나의 객체가 아닌 객체의 배열이기 때문이라는 것을 알게 되었습니다. 물론 그 이유는 장바구니에 담긴 각 개별 항목이 자체 개체여야 하기 때문입니다. 그래서 내 해결책은 다음과 같습니다.
으아악분석: this.cart는 객체가 아닌 배열이므로 먼저 for 루프를 사용하여 장바구니에 있는 각 항목의 인덱스를 가져온 다음 데이터를 데이터베이스에 게시하는 함수를 호출해야 합니다.