
הטקסט המלא של הדקות הראשונות בהרצאה «AJAX» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לנושא מאוד חשוב בג'אווה סקריפט, מאוד נפוץ, והוא נקרא אג'אקס. אג'אקס זה קיצור של אסינכרוניוס ג'אווה סקריפט אנד אקס-אמ-אל.
ומה שאג'אקס אומר זה פשוט מאוד לבצע קריאה לשרת מדף ה-HTML שלנו, לשלוח נתונים, לקבל בחזרה מידע, אבל כל זה לא על ידי ריקווסט רגיל שהדף מתרפרש ואנחנו רואים את כל הדף נטען, אלא קריאה מאחורי הקלעים.
בואו נסתכל על דוגמה איפה קיים לנו אג'אקס. אז אני גולש לאתר gmail.com וזה בעצם האימייל של חברת ג'ימייל. ועכשיו הדף הזה שמבקש ממני to sign in, אני רואה פה user name, אני רואה פה password, אני בעצם רואה שדף הזה הוא דף סטטי, עומד ובכלל לא משתנה.
אבל אם אנחנו נסתכל טוב טוב בדף, אנחנו נראה את המספר הזה שקופץ פה כל שנייה. מה שאנחנו רואים כאן זה כל שנייה מספר מתעדכן. בואו נקרא מה בעצם המספר הזה אומר. המספר אומר over ואז המספר הזה megabytes and counting of free storage.
כלומר gmail באה ואומרת לנו יש לנו את המספר הזה שמספר מאוד מאוד גבוה של megabytes בכלל שיש להם עבור storage של אנשים ששמים את המידע שלהם בgmail בכל העולם וכל שנייה אני רואה שהמספר הזה קופץ.
עכשיו, איך זה יכול להיות שהמספר הזה מתעדכן והדף עצמו נשאר סטטי? הרי רק JavaScript יכולה לעדכן את המספר הזה באופן סטטי. אז האם JavaScript מעדכנת את המספר הזה בלי בכלל קשר לשרת על ידי איזשהו טיימר שמתעדכן כל שנייה ומוסיף מספר מסוים של ערכים למספר הזה?
אז כמובן התשובה היא לא, אחרת אנשים היו עולים על זה ופשוט היו קולטים שזה מספר מפוברק. מה שקורה זה שכל שנייה gmail בדף הזה גולשת לשרת, מקבלת מהשרת את הנתון הנכון של כמה מגה בייט או פרי סטורג' קיימים ל-gmail, מחזירה באותה שנייה את המספר הזה ל-JavaScript ו-JavaScript מציגה את
המספר הזה על הדף עצמו. אבל הנקודה היא שהדף נשאר סטטי ואפשר לעשות את הדבר הזה רק עם שימוש ב-Ajax. לא היו משתמשים באג'קס והיו מרצים גלישה לשרת, אז היינו רואים משהו מוזר שאני עושה כרגע, שכל פעם אני לוחץ על F5 בעצם והדף מתרפרש כי ישנו ריקווסט לשרת.
וזה כמובן חוויית גלישה פחות נוחה למשתמש לראות דבר כזה. אם הדף היה מכיל גרפיקה הרבה יותר כבדה, אז בכלל היה לוקח לו הרבה יותר זמן להתען.
ולכן אנחנו חייבים שיהיה לנו פה את המנגנון הזה שהדפדפן מאפשר לגשת לשרת בלי לרפרש את הדף, לגשת לשרת מאחורי הקלעים, ריקווסט רגיל בסופו של דבר, הדף בשרת מקבל את הריקווסט, מבצע את הפעולה הדרושה, נניח במקרה הזה לוקח כמה מגה בייט אוף רי סטורג' קיימים, מעדכן אותו,
ומחזיר אותו ללקוח, שהלקוח מקבל בחזרה את התשובה, מציג אותה על איזשהי לייבל בלי שקרה שום דבר לדף. אז בואו נראה בעצמנו איך אנחנו עושים דבר כזה.
בשביל לעשות דבר כזה אנחנו צריכים כמובן שיהיה לנו גם צד שרת עכשיו באפליקציה ולא רק html, לא רק צד לקוח. ולכן מה שנעשה, אנחנו פשוט נפתח New Website.
אנחנו נעשה את זה בפרויקט sp.net. אז בואו ניצור פרויקט חדש ואנחנו רואים כבר שהוא שמור פה בתיקיית אג'אקס. בואו נפתח אותו בתיקייה חדשה, נקרא לה אג'אקס Open, אוקיי.
ויש לנו כרגע דף, או יותר נכון, פרויקט ASP.NET חדש. בואו נוריד ממנו כמה דברים בשביל שיהיה יותר פשוט להבין מה קורה בו. נוריד את הדף של ה-ASP.NET, נוריד את הסקריפטס, נוריד את appdata ונישאר עם פרויקט פשוט.
נוסיף new item ונצרף קובץ html פשוט, אבל עדיין יש לנו פה פרויקט שבעצם הוא צד שרת וצד לקוח. בואו נקרא לדף הזה home page, ויש לנו דף html רגיל לגמרי.
נקרא לזה בכותרת אג'אקס אסינכרוניוס ג'אווה סקריפט אנד אקס אמ.ל. שזה הראשי התיבות של אג'אקס. אוקיי, ועכשיו אנחנו יכולים להגדיר כאן איזה שהיא סקריפט language javascript type text javascript אנחנו רוצים להגדיר לנו לחצן רגיל input type שווה button ומה שאנחנו רוצים לעשות זה להביא משהו מהשראת לדוגמה show server time, מהו הזמן
האמיתי שקיים בצד השרת, ואנחנו רוצים לעשות את כל זה מבלי לרפרש את הדף, כלומר להביא את המידע ב-ajax מאחורי הקלעים. אוקיי, בואו נגדיר כאן span, נקרא לה id lbl server time, וכמובן הזמן של השעון של הלקוח הוא יכול להיות אחר מאשר הזמן של השעון של השרת, כי יכול להיות שהשרת נמצא במדינה אחת,
ודפדפן גולש אליו ממדינה אחרת. אנחנו רוצים לקחת את הזמן שנמצא בצד של השרת. אז בואו נבנה פה פונקציה ונקרא לה CreateRequest והיא זאת שתייצר את ה-request ב-Ajax.
אז בואו נראה איך אנחנו עושים את זה. דבר ראשון אנחנו צריכים לקחת משתנה ברמה גלובלית, נקרא לו Ajax. מה שאנחנו רוצים לעשות זה להכניס לתוכו אובייקט חדש מטיפוס XMLHTTPRequest.
האובייקט הזה זה אובייקט שאחראי על יצירת ה-request ב-ajax ומסוגל גם לשלוח את הבקשה לשרת מאחורי הקלעים בעזרת מנוע של ajax וגם לקבל בחזרה את המידע מהשרת ולדווח ל-JavaScript שהמידע התקבל.
דבר הבא שאנחנו רוצים לעשות זה לקרוא לפונקציה שנקראת open שמגדירה כל מיני פרמטרים בשביל לשלוח את הבקשה על ידי ajax.
הפרמטר הראשון שאנחנו צריכים להגדיר זה מהי שיטת שליחת הנתונים. אנחנו יכולים לשלוח את הנתונים בגט ואנחנו יכולים לשלוח את הנתונים בפוסט. להזכירכם, גט זה אומר שהנתונים הולכים להישלח לשרת ב-query סטרינג ופוסט הנתונים הולכים להישלח לשרת ב-request אבל לא בתוך ה-query סטרינג.
query סטרינג זה הפרמטרים שנשלחים בשורת ה-URL. אנחנו נעשה דוגמה גם לזה וגם לזה. אז בואו נשלח בגט. הפרמטר הבא שאנחנו צריכים זה לאיזה דף אנחנו רוצים לשלוח את הנתונים.
אז בואו בשלב הזה נוסיף דף לשרת Add New Item, נבחר ב-Web Forum, נקרא לו Server Page וזה דף ASP.NET רגיל שמתבצע בצד של השרת ואז אנחנו יכולים לקחת את השם שלו, ServerPage.aspx, לחזור לדף ה-HTML ולהדביק אותו פה כי זה הדף שאנחנו גולשים אליו.
עכשיו בואו גם נשלח לדף הזה פרמטרים, בגלל שאנחנו בשיטת get שהגדרנו כאן אז הפרמטרים נשלחים ב-query string ולכן נגדיר את הפרמטרים ב-query string במחרוזת הזאת בשורת ה-url שמופרדת על ידי סימן שאלה.
אז איזה פרמטר נשלח? אז בואו נשלח פרמטר שנקרא פורמט שווה בוא נניח 1 או 2 וזה אומר איזה פורמט אני רוצה לקבל את השעה מהצד של השרת.
אם זה בפורמט 1 בוא נניח שאני רוצה לקבל את השעה ואת השעה פלוס השניות, אם זה פורמט 2 אני רוצה לקבל את השעה בלי השניות, דבר מסוים כזה.
ככה אנחנו יכולים לשלוח פרמטר לשרת וגם לקבל בחזרה את הפרמטר לפי מה ששלחנו. הדבר הבא שאנחנו רוצים לשלוח זה פרמטר בולעני שנקרא true או false כמובן, שמציין האם השליחה צריכה להיות אסינכרונית או סינכרונית.
זה אומר אסינכרונית וזה אומר שבזמן שאני שולח את הבקשה הזאתי מבצע בעצם את הריקווסט הדפדפן ימשיך לבצע את הפעילויות הרגילות שלו ולא ימתין עד שהתשובה תגיע בחזרה אם הייתי שולח פולס אז בזמן השליחה הייתי פשוט נתקע עד שהתשובה הייתה מגיעה בחזרה בשיטה השנייה בשיטה הסינכרונית
משתמשים כאשר אני חייב לקבל את הפרמטר