בקשת http שהתגובה ריקה
-
אני ניגש לדף PHP באמצעות fetch.
הקוד בשרת שניגשתי אליו עד היום עובד תקין לחלוטין, וגם היום כשאני ניגש בדרך הרגילה (עם GET) הוא חוזר תקין. רק עכשיו בפניה בPOST יש קוד 200 אבל התשובה עצמה ריקה.
וכשאני פותח את אותה הפניה (בלחיצה כפולה) בURL של הדפדפן חוזרת תשובה תקינה. (כנראה כי בדפדפן זה נשלח GET)ניסיתי לעבור על הPHP ובתחילת הקוד אני יכול להדפיס משהו אבל אחרי IF אחד זה כבר יחזור ריק.
השוויתי בין ההיידרים בבקשה שחזרה עם תשובה (מה שהודפס לפני הIF הראשון שבקוד) לזו שחזרה ריקה, וראיתי שבתשובה שחזרה ריקה אז יש היידר נוסף
Cache-Control: no-store, no-cache, must-revalidate
מה זה אומר לגבי? (או שלא זה הנקודה וצריך לחפש משהו אחר).
תודה.
הקוד
await fetch("/index.php?p=get_functions&format=json", { method: "post", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, //make sure to serialize your JSON body body: JSON.stringify({ }) }) .then( (response) => { console.log(response) //do something awesome that makes the world a better place });
-
בfetch התשובה הראשונית רק מכילה קוד מצב וכותרות (שזה ההתחלה של התשובה), לא את גוף התשובה מה שנקרא body/payload שיש את זה גם בבקשה.
זה שני שלבים במציאות כי גוף התשובה יכול להיות גדול/ארוך/אין סופי.
כדי לגשת לתוכן קוראים למתודה text או json שמחזירים גם פרומייז ש"נפתר" בסיום הקבלה והעיבוד, ככה:await fetch("/index.php?p=get_functions&format=json", { method: "post", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, //make sure to serialize your JSON body body: JSON.stringify({}) }).then(response => response.text() ).then(resText => console.log(resText) );
אגב אם באמת בדוגמה שלך הבקשה מכילה body עם JSON של אובייקט ריק, זה בהחלט מיותר, אפשר להשמיט את השורה הזאת.