במדריך הבא נראה איך ניתן לעשות POST request עם נתוני טופס אלמנטור
לדוגמא: יש לנו טופס של הרשמה לקבלת דיוור ונרצה לשלוח אותו למערכת דיוור או ל CRM כלשהו
ראשית ניקח את הסלקטור של התגית FORM בטופס שאנחנו רוצים לשלוח ממנו את הנתונים
ניתן להגדיר לטופס ID ייחודי (לשים לב שמגדירים את ה ID לטופס עצמו ולא לווידג'ט טופס)
נגדיר משתנה עם הסלקטור של הטופס:
const form = document.querySelector('#test_form');
ניצור פונקציה שמאזינה לכפתור סאבמיט של הטופס הזה ונוסיף אליו preventDefault כדי למנוע את התנהגות ברירת המחדל של הטופס
const form = document.querySelector('#test_form');
form.addEventListener('submit', (event) => {
event.preventDefault();
});
נוסיף את 2 המשתנים הבאים לאחסון פרמטרים של הנתונים מהטופס והגדרתם לשליחה בגוף הבקשת POST
const form = document.querySelector('#test_form');
form.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(form);
const data = new URLSearchParams();
// Paremeters
});
בשלב הבא נגדיר את שמות השדות שנרצה לקלוט אל הפרמטרים במערכת של היעד לשליחה כאשר ב- formData.get נגדיר את שם השדה בטופס באתר שלנו וב- data.append נגדיר את שם הפרמטר במערכת אליה אנחנו שולחים (את הפרמטרים ניקח מהדוקומנטציה של המערכת דיוור או ה CRM)
const form = document.querySelector('#test_form');
form.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(form);
const data = new URLSearchParams();
// Paremeters
data.append('name', formData.get('form_fields[ffullname]'));
data.append('email', formData.get('form_fields[email]'));
data.append('phone', formData.get('form_fields[phone]'));
data.append('agreement', formData.get('form_fields[agreement]'));
});
את שמות השדות ניתן לראות באטריביוט name של השדה
בשלב האחרון נוסיף את הפונקציה לביצוע בקשת ה-POST עם הכתובת URL לשליחה
יש להטמיע באתר את הסקריפט (ניתן להשתמש בניהול קודים של אלמנטור או להוסיף לתבנית בת בסוף ה body)
כך נראה הקוד המלא:
const form = document.querySelector('#test_form');
form.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(form);
const data = new URLSearchParams();
// Paremeters
data.append('name', formData.get('form_fields[ffullname]'));
data.append('email', formData.get('form_fields[email]'));
data.append('phone', formData.get('form_fields[phone]'));
data.append('agreement', formData.get('form_fields[agreement]'));
fetch('https://webhook.site/3fe4473b-9c57-4dfb-b988-c0e7927539d0', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: data.toString(),
})
});
לצורך הדוגמא נשתמש ב- endpoint של מערכת הבדיקות webhook.site שמספקת לנו webhook לשליחת נתונים ומאפשרת לראות איך הנתונים מתקבלים במערכת.