البرمجة

تعامل PHP مع بيانات fetch() في جافا سكريبت

عند استخدام دالة fetch() في جافا سكريبت لإرسال بيانات باستخدام الطريقة POST إلى ملف PHP، قد تواجه تحديات في استلام هذه البيانات في ملف PHP باستخدام $_POST. يبدو أنك واجهت مشكلة حيث يعود $_POST بمصفوفة فارغة. الكود الذي أرفقته يعمل على تسليم البيانات بتنسيق JSON، ولكن PHP لا يفهم ذلك تلقائياً عبر $_POST.

في حين أن استخدام json_decode(file_get_contents('php://input'), true); يحل المشكلة، إلا أنك تعتبرها طريقة “hackish”. لفهم السبب وراء هذا السلوك، يجب أن نتناول كيفية تعامل PHP مع البيانات المرسلة بواسطة fetch().

عندما تقوم بإرسال بيانات باستخدام fetch() وتحديد method كـ “post”، يتوقع PHP أن تكون البيانات في تنسيق application/x-www-form-urlencoded، وليس application/json الذي يتم توفيره بواسطة JSON.stringify() في جافا سكريبت.

لتجنب الطريقة “hackish” التي استخدمتها، يمكنك تغيير الطريقة التي ترسل بها البيانات من خلال fetch()، عبر تحديد headers لتكون {'Content-Type': 'application/x-www-form-urlencoded'}. هذا يجعل PHP يعالج البيانات باعتبارها $_POST بشكل صحيح.

javascript
fetch('/string.php', { method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ name: 'helloe world', }), })

باستخدام هذا التحديث، يجب أن يعمل $_POST بشكل صحيح دون الحاجة إلى الطرق “hackish” التي استخدمتها سابقًا.

المزيد من المعلومات

في عملية تفصيل النقاط المهمة لفهم كيفية تعامل PHP مع البيانات المرسلة من جافا سكريبت باستخدام fetch()، يمكن أن نلقي نظرة على بعض التفاصيل الفنية والأفضليات في هذا السياق.

أولًا وقبل كل شيء، يعتبر استخدام fetch() مع طريقة POST عملية شائعة لنقل البيانات بين جافا سكريبت وخوادم PHP. في هذا السياق، يعمل fetch() على إرسال البيانات بشكل غالبًا في تنسيق JSON، وهذا يعني أن البيانات ستصل إلى الخادم كمصفوفة JSON.

لكن PHP تتوقع تلقي البيانات POST بشكل افتراضي في تنسيق application/x-www-form-urlencoded، وليس JSON. هنا يكمن السبب وراء عدم عمل $_POST بشكل صحيح في بعض الحالات. تصحيح هذا يتطلب تحديد Content-Type في رأس الطلب باستخدام headers في fetch()، كما ذكرت سابقًا.

الطريقة “hackish” التي استخدمتها (استخدام json_decode(file_get_contents('php://input'), true);) تعتبر حلا بديلًا ولكن قد تبدو أقل أناقة.

عمومًا، يُفضل استخدام fetch() بتنسيق يفهمه PHP بشكل صحيح (مثل application/x-www-form-urlencoded) عند إرسال البيانات إذا كانت النظام يعتمد على $_POST. وفي حال استمرار استخدام JSON، يمكن استخدام الطريقة التي ذكرتها مع الوعي بأن هذا السلوك قد يكون متوقعًا.

زر الذهاب إلى الأعلى