
הטקסט המלא של הדקות הראשונות בהרצאה «שימוש ב-AJAX MVC - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו עוברים לנושא שנקרא אג'אקס, איך אנחנו משתמשים באג'אקס בפרויקט MVC. אג'אקס זה קיצור של Asynchronous JavaScript and XML.
עכשיו, מה זה בדיוק אג'אקס ולמה חשוב לנו לדעת את זה? אג'אקס מאפשר לנו לשלוח ריקווייסט לשרת בלי לרפרש את הדף, והרבה פעמים אנחנו מציגים דף ואנחנו רוצים לבצע גלישה לאותו הדף, לא לדף אחר, להביא מידע ולעדכן את הדף עצמו, בלי שהלקוח יראה שכל הדף נטען לו מחדש.
אם הדף מכיל גרפיקה כבדה, או שהוא מכיל המון נתונים, ואנחנו נגלוש לאותו הדף בשיטה הקלאסית, בוא נניח עם לחצן סבנית, אז הלקוח יראה פשוט שכל הדף מתרפרש לו וזו גלישה פחות נעימה בשביל הלקוח.
אג'קס מאפשר לחוויית הגלישה להיות יותר אסתטית ויותר נעימה ללקוח. במידה ואנחנו רוצים לגלוש לדף אחר מהדף שבו אנחנו נמצאים, אין לנו כאן ביצוע אג'קס מפני שגם ככה אנחנו רוצים להציג דף אחר ולכן חובה עלינו לטעון את כל הדף מההתחלה.
כאן לא תהיה אג'קס. כאן יהיה גלישה עם לינק או עם לחצן submit שמביא אותנו לדף אחר או עם JavaScript שמביא אותנו לדף אחר אבל אג'קס זה רק מתי שאנחנו רוצים לגלוש לאותו הדף להביא מידע להישאר באותו הדף ופשוט לעדכן פרת אינפורמציה בדף עצמו בלי לרפרש את כל הדף לכן מאוד חשוב לנו לדעת איך זה מתבצע ב-MVC עם
כל הנושא של הקונטרולרים והאקשנים לאן בדיוק אנחנו מבצעים גלישה. אז בואו נראה איך אנחנו יכולים לבצע את זה. אז יש לנו כאן את התרגיל שעבדנו עליו מקודם, יש לנו פה את ה-controller product, יש לנו כאן אינדקס שמציג לנו את כל המוצרים, יש לנו את ה-detail שמציג לנו מוצר אחד, preate מאפשר ליצור מוצר חדש, update מאפשר לעדכן מוצר קיים,
ודיליט מוחק לנו מוצר. אנחנו ניקח אקשן אחד מכל האקשנים האלה, אנחנו נבחר את קריאייט, ואנחנו נבצע יצירה של מוצר בלי לצאת מהדף וללכת לדף אחר, ולהציג איזושהי הודעה למשתמש.
כלומר, ברגע שהמשתמש רואה את הדף של הקריאייט, הוא מכניס נתונים לגבי מוצר חדש, לוחץ על הלחצן להוספת המוצר, עדיין מתרחשת גלישה לשרת, אבל הגלישה תתבצע באג'קס מאחורי הקלעים, הדף לא יתרפרש ולא ייעלם לשום מקום, השרת יקבל את הנתונים שהמשתמש רוצה להוסיף, יכניס אותם לדאטאבייס, יחזיר תשובה לאותו הדף,
וכמובן אנחנו נציג את התשובה באחת ממספר דרכים בדף של הלקוח. כל זה יתבצע על ידי אג'קס מאחורי הקלעים ולא יראו שום רפרוש של הדף או טעינה מחדש של כל הדף.
דוגמה שאתם יכולים לראות דרך אגב זה אם אתם נמצאים בתוך פייסבוק ואתם רואים את הפידים שלכם על הקיר, ופתאום יש לכם איזה פיד חדש של אחד מהחברים, אתם לא רואים את כל הדף של פייסבוק מתרחש, אלא אתם רואים פתאום שמופיע לו החדשה שהתקבלה מאחד החברים, היא מופיעה על הקיר בלי שאנחנו נראה את כל
הדף נטען מחדש. לכן זה מאוד נוח ומאוד אסתטי להשתמש בצורה כזאת, מפני שהחוויית גלישה היא הרבה יותר נוחה למשתמש.
אז יש לנו פה את ה-Create, ומה שאנחנו הולכים לראות, אנחנו הולכים לראות מספר שיטות שבהן אנחנו יכולים לשלוח מידע באג'אקס, לעבד אותו בשרת, לקבל בחזרה ללקוח תשובה ולהציג את התשובה באחת ממספר דרכים על הדף שהמשתמש כבר היה בו.
אז בואו נתחיל. אנחנו הולכים לבצע פה מספר שינויים. קודם כל בואו נראה איך האתר מתנהג ללא אג'אקס. כאשר אנחנו גולשים לאתר אנחנו מנסים עכשיו לבצע הוספה של מוצר חדש, נוסיף איזשהו מוצר מבצע אד ונעלם לנו הדף חזרנו לדף של הרשימה ופה אנחנו רואים את המוצר שהתווסף
בוא נניח שאנחנו לא רוצים למחוק רגע את המוצר הזה בוא נניח שאנחנו לא רוצים לגשת לדף של כל הרשימה אלא אנחנו מעוניינים שכאשר הלקוח מוסיף מוצר חדש ולוחץ על אד הוא עדיין נשאר בדף הזה בכדי לאפשר לו להוסיף עוד מוצר אם הוא רוצה אם הוא רוצה לחזור לרשימה נארגן פה איזה לינק של לחזור לרשימה
אבל אנחנו לא רוצים שכאשר אנחנו לוחצים על add כל הדף יתרפרש והוא יישאר באותו המצב שבו היה מקודם. אז איך אנחנו יכולים להשיג את זה? בואו קודם כל נארגן את הלינק שמאפשר לנו לגלוש בחזרה לכל הרשימה.
זה בשביל לראות אם המוצר אכן התווסף. נלך לproducts, נלך ל-create ונוסיף פה בסוף, אחרי לחצן submit נוסיף איזשהו לינק שיאפשר לגלוש בחזרה לדף הראשי.
יש לנו פה html, action link, go back to list ואנחנו רוצים לחזור ל-index. בואו נוודא שהלינק עובד כמו שצריך, go back to list, חוזר בחזרה.
מעולה. עכשיו, איך אנחנו יכולים לטפל ב-request שהתבצע על ידי אג'אקס? הדבר הראשון שאנחנו צריכים לעשות, אנחנו רוצים להשתמש ב-jQuery בכדי לבצע אג'אקס.
זאת השיטה הפשוטה ביותר, יש כמובן כמה שיטות אחרות להשתמש באג'אקס, תשומה על ידי JavaScript טהור אבל היא טיפה מסורבלת אז לצורך שימוש ב jQuery בואו נצרף לסלושן על ידי נאגט את ספריית jQuery נאתר אותה יש לנו פה את הספרייה מבצע install k נסגור ונראה פה בסקריפט את jQuery אנחנו רואים אותו פה jQuery 2 3 0 מינימום הדבר הבא שאנחנו צריכים לעשות זה להצביע על
הקובץ הזה מהלייאוט הראשי בכדי שכל הדפים יוכלו ליהנות ממנו. אז ניגש ל-Layout, ניגש לאזור של ה-Head ונבנה כאן סקריפט והסורס שלו מצביע על אותו קובץ jQuery.
נאתר אותו בסקריפטס, הנה הוא, וכעת האתר יכול להשתמש ב-jQuery בכל המקומות. הדבר הבא שנעשה, נייצר כאן תגית RenderSection מפני שאנחנו הולכים לכתוב JavaScript בדף.
נקרא לתגית הזאת Scripts ונגדיר שזה ולא require. כעת אנחנו יכולים לגשת לדף שלנו ולבנות סקריפט עבור אג'אקס.
אז בואו ניגש לכאן, נבנה כאן סקשן, נקרא לו סקריפט, ופה בעצם אנחנו רוצים לכתוב קטע של JavaScript שיבצע את האג'אקס.
אג'אקס מתבצע ב-JavaScript או JavaScript טהור או על ידי jQuery ב-JavaScript, ולכן אנחנו צריכים לכתוב את זה בצד הלקוח. אוקיי, אז בואו נתחיל לכתוב בצד הלקוח את הקוד כדי לשלוח את הנתונים מהטופס הזה לשרת בלי שלחצן הסדמית יבצע את השליחה עצמה.
איך אנחנו עושים את זה? בואו נגדיר פה סקריפט. אנחנו נעשה את הכל כרגע באותו הדף בכדי שנראה את הכל במבט אחד, אבל כמובן שבמציאות אנחנו יכולים לבנות קובץ JavaScript חיצוני שמחזיק את הנתונים האלה ופשוט להפנות אליו מכאן.
אז יש לנו כאן קודם כל את האירוע של jQuery שנקרא Document Ready. האירוע הזה מתבצע תמיד בהרצה של הדף בטעינת הדף ולכן אנחנו יכולים להגדיר כאן רישום לדוגמה לאירועים כשאנחנו רוצים לשנות את הרישום של האירועים הקיימים.
יש לנו פה את הלחצן סבניט ויש לו אירוע קליק אנחנו רוצים להירשם אליו ובקליק שאנחנו נרשמים אליו אנחנו רוצים לשלוח את המידע הזה באג'קס לשרת ולבטל את פעילות הסבניט כך שהדף לא יתרפרש כי פעילות הדיפולטית של לחצן סדמית זה תמיד לרפרש את הדף.
אז אנחנו נגדיר פה פונקציית אינליין והפונקציית אינליין הזאת תבצע רישום ללחצן. בואו נקרא ל-JQuery, נאתר הלחצן שאנחנו רוצים לתקשר איתו, נקרא לו btn.create זה ה-ID שאנחנו צריכים להוסיף לו.
אחרי שיתרנו את הלחצן בעזרת JQuery נירשם לאירוע קליק שלו. באירוע קליק של לחצן אנחנו הולכים לכתוב פונקציית אינליין אוספת.
זאת אומרת שהפונקציה הזאת שאנחנו נמצאים בתוכה כרגע הולכת להתבצע כאשר הלקוח הולך ללחוץ על הלחצן add או create. מה אנחנו רוצים לעשות בתוך הפונקציה?
בתוך הפונקציה קודם כל ניקח את תגית הפורם עצמה.