1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:04,810 [Гуляе музыка] 3 00:00:04,810 --> 00:00:06,940 >> Даг Lloyd: Так што яшчэ роду паняцці, што 4 00:00:06,940 --> 00:00:12,120 роду трапляе пад парасонам JavaScript з'яўляецца тое, што называецца AJAX. 5 00:00:12,120 --> 00:00:15,310 Да гэтага моманту, нашы ўзаемадзеянне з JavaScript 6 00:00:15,310 --> 00:00:17,727 была абмежаваная націснуць Кнопка і нешта адбываецца. 7 00:00:17,727 --> 00:00:19,560 І канкрэтна, тое, што адбываецца 8 00:00:19,560 --> 00:00:22,950 нашы сайты выглядаць і адчуваць сябе змены. 9 00:00:22,950 --> 00:00:23,450 Дакладна? 10 00:00:23,450 --> 00:00:26,540 Як і ў прыватнасці, у аб'ектная мадэль дакумента відэа, 11 00:00:26,540 --> 00:00:29,060 Я змяніў колер фону. 12 00:00:29,060 --> 00:00:33,240 Але калі я гэта зрабіў, у мяне не было рабіць нейкія адмысловыя дадатковыя запыты. 13 00:00:33,240 --> 00:00:36,800 У мяне не было прасіць, каб сервер адправіць мне новую старонку. 14 00:00:36,800 --> 00:00:39,620 Я толькі што змяніў тое, што я ўжо. 15 00:00:39,620 --> 00:00:42,245 У мяне не было, каб перазагрузіць маёй старонцы, і рэчы вызначана змянілася, 16 00:00:42,245 --> 00:00:43,760 так што гэта выдатна. 17 00:00:43,760 --> 00:00:48,400 Але ёсць, безумоўна, некаторыя ўдзел кіраўніцтва узаемадзеянне з карыстальнікам. 18 00:00:48,400 --> 00:00:53,140 AJAX з'яўляецца прахалодны метад, які дазваляе нам абнавіць кантэнце старонкі, 19 00:00:53,140 --> 00:00:55,750 і не толькі погляд і адчуваю, без перазагрузкі. 20 00:00:55,750 --> 00:00:58,610 >> І асабліва, калі я кажуць абнаўлення кантэнце старонкі, 21 00:00:58,610 --> 00:01:01,990 Я не кажу, перапішам старонка з дапамогай JavaScript. 22 00:01:01,990 --> 00:01:06,560 Я кажу, што мы на самай справе прасіць больш інфармацыі з сервера 23 00:01:06,560 --> 00:01:08,640 без наша старонка неабходнасці перазагрузкі. 24 00:01:08,640 --> 00:01:10,850 >> Цяпер, нібы крыху больш прасунутая тэхніка 25 00:01:10,850 --> 00:01:11,950 што мы збіраемся казаць аб у гэтым відэа. 26 00:01:11,950 --> 00:01:13,720 Мы збіраемся, каб мець некаторы ўзаемадзеянне. 27 00:01:13,720 --> 00:01:17,750 Але калі мы робім, я буду рабіць запыты да вэб-серверу. 28 00:01:17,750 --> 00:01:21,140 У гэтым выпадку, толькі што працуе мой вэб-сервер Apache. 29 00:01:21,140 --> 00:01:25,010 Я збіраюся рабіць дадатковыя запыты, пакуль я наведвання вэб-старонкі, 30 00:01:25,010 --> 00:01:26,890 але мая старонка не абнаўляецца. 31 00:01:26,890 --> 00:01:30,000 >> Гэта проста будзе асінхронна абнавіць старонку. 32 00:01:30,000 --> 00:01:31,840 І гэта, на самай справе, якія AJAX расшыфроўваецца, 33 00:01:31,840 --> 00:01:35,400 з'яўляецца асінхронны JavaScript і XML-. 34 00:01:35,400 --> 00:01:37,910 XML з'яўляецца іншы выгляд разметкі мова, і вы можаце сартаваць 35 00:01:37,910 --> 00:01:39,680 думаць пра яго, як і HTML. 36 00:01:39,680 --> 00:01:42,990 Гэта не зусім тое ж самае, але гэта ў асноўным проста мова разметкі. 37 00:01:42,990 --> 00:01:47,770 Так што гэта асінхронны JavaScript і мова разметкі. 38 00:01:47,770 --> 00:01:50,590 >> Так, каб выкарыстоўваць гэта AJAX AJAX technique-- 39 00:01:50,590 --> 00:01:52,230 не з'яўляецца асобным мовай праграмавання. 40 00:01:52,230 --> 00:01:55,300 Гэта проста свайго роду набор techniques-- мы 41 00:01:55,300 --> 00:01:57,870 неабходна стварыць спецыяльны Аб'ект JavaScript, які 42 00:01:57,870 --> 00:02:00,689 называецца XMLHttpRequest. 43 00:02:00,689 --> 00:02:01,980 Цяпер, гэта вельмі лёгка зрабіць гэта. 44 00:02:01,980 --> 00:02:04,550 Мы проста скажам, вар, незалежна мы хочам, каб назваць гэты аб'ект, 45 00:02:04,550 --> 00:02:07,030 роўная новы XMLHttpRequest. 46 00:02:07,030 --> 00:02:11,050 І зараз мы ўжо атрыманы AJAX роду аб'екта, 47 00:02:11,050 --> 00:02:14,370 або XMLHttpRequest Аб'ект, які дазволіць 48 00:02:14,370 --> 00:02:18,360 нам асінхронна абнаўляць нашу старонку. 49 00:02:18,360 --> 00:02:23,100 >> Пасля таго як мы атрымалі гэты новы аб'ект, гэта XMLHttpRequest, 50 00:02:23,100 --> 00:02:27,760 мы павінны зрабіць што-тое, каб яго onreadystatechange паводзіны. 51 00:02:27,760 --> 00:02:30,360 Onreadystatechange паводзіны на самай справе проста 52 00:02:30,360 --> 00:02:34,080 калі вы робіце заяўку на вэб-старонцы, то старонка 53 00:02:34,080 --> 00:02:35,880 праходзіць праз шэраг крокаў. 54 00:02:35,880 --> 00:02:37,370 Па-першае, запыт не быў адпраўлены. 55 00:02:37,370 --> 00:02:39,860 Затым запыт быў адпраўлена, але не прыняць адпаведныя меры. 56 00:02:39,860 --> 00:02:41,580 Тады просьба была прыняць адпаведныя меры. 57 00:02:41,580 --> 00:02:43,680 Тады запыт адпраўляецца назад да вас. 58 00:02:43,680 --> 00:02:46,930 >> Затым запыт цалкам загружаныя на вашай старонцы. 59 00:02:46,930 --> 00:02:48,640 Гэта розныя дзяржавы. 60 00:02:48,640 --> 00:02:53,890 І таму мы павінны ўсталяваць нашы Аб'ект XMLHttpRequest новы 61 00:02:53,890 --> 00:02:58,740 мяняцца, калі змены ў стан гатоўнасці. 62 00:02:58,740 --> 00:03:01,925 І, як правіла, мы робім гэта, вызначэнне ананімную функцыю, якая 63 00:03:01,925 --> 00:03:04,490 мы знаёмыя з ад JavaScript цяпер, што 64 00:03:04,490 --> 00:03:09,840 выклікаецца пры змене стан гатоўнасці. 65 00:03:09,840 --> 00:03:11,340 Гэта сапраўды не нашмат больш, чым гэта. 66 00:03:11,340 --> 00:03:14,340 Мы толькі збіраемся быць, якія вызначаюць ананімная функцыя, накшталт як, што 67 00:03:14,340 --> 00:03:16,440 мы рабілі ў JavaScript, дзе мы б 68 00:03:16,440 --> 00:03:18,750 ёсць ананімную функцыю Адказ на на клік, 69 00:03:18,750 --> 00:03:23,230 або калі мы рабілі карту розныя аб'екты ў масіве. 70 00:03:23,230 --> 00:03:25,220 >> Нешта адбылося, калі то была націснутая. 71 00:03:25,220 --> 00:03:28,810 У гэтым выпадку, гэта проста нешта адбываецца, калі стан нашай старонцы 72 00:03:28,810 --> 00:03:30,160 змены. 73 00:03:30,160 --> 00:03:32,730 Ёсць два ўласцівасці якія накшталт of-- яны не 74 00:03:32,730 --> 00:03:35,524 толькі ўласцівасці, якія ўласцівыя XMLHttpRequest, 75 00:03:35,524 --> 00:03:36,940 але яны даволі важныя. 76 00:03:36,940 --> 00:03:39,815 Там нешта называецца readyState, які, як вы можаце здагадацца, 77 00:03:39,815 --> 00:03:41,750 гэта звязана з onreadystatechange. 78 00:03:41,750 --> 00:03:44,250 Гэта на самай справе кажа вам, што readyState ёсць. 79 00:03:44,250 --> 00:03:46,289 0, 1, 2, 3, і 4 магчымасці там, 80 00:03:46,289 --> 00:03:48,080 і яны накшталт прыкладна адпавядаюць таму, што 81 00:03:48,080 --> 00:03:50,030 Я проста кажу пра секунду таму. 82 00:03:50,030 --> 00:03:53,100 >> І тады статус, які Спадзяюся, калі ўсё прайшло нармальна, 83 00:03:53,100 --> 00:03:56,710 200, які з'яўляецца скарачэннем для, вядома, добра, 84 00:03:56,710 --> 00:03:58,330 які мы знаёмыя з HTTP. 85 00:03:58,330 --> 00:04:03,735 Такім чынам, мы спадзяемся, што наш гатовы стан чатыры, і наш статус 200. 86 00:04:03,735 --> 00:04:07,940 І калі наш гатоўнасці чатыры, і адказ 87 00:04:07,940 --> 00:04:11,490 гатовы паставіць на старонкі і статус 200, 88 00:04:11,490 --> 00:04:13,580 мы былі ў стане зрабіць ўсё паспяхова, 89 00:04:13,580 --> 00:04:17,209 Цяпер мы можам асінхронна абнавіць нашу старонку 90 00:04:17,209 --> 00:04:21,730 без перазагрузкі Усе ўтрыманне яго. 91 00:04:21,730 --> 00:04:27,710 >> Пасля таго як мы вызначылі, што адбываецца да паводзін onreadystatechange, 92 00:04:27,710 --> 00:04:31,020 і мы праверылі, што readyState 4, а статус 200, 93 00:04:31,020 --> 00:04:33,900 то ўсё, што мы павінны зрабіць, гэта адкрыць асінхронны 94 00:04:33,900 --> 00:04:38,530 Запыт, які проста робіць HTTP-GET запыт цэлым. 95 00:04:38,530 --> 00:04:41,950 Проста рабіць гэта праграмна, а не праз наш вэб-браўзэры. 96 00:04:41,950 --> 00:04:43,786 А потым мы адпраўляем гэтую просьбу. 97 00:04:43,786 --> 00:04:45,660 Так што, можа быць, робіць гэта выглядаць у кантэксце? 98 00:04:45,660 --> 00:04:49,790 Дык вось, што функцыя здзелак з AJAX запытаў. 99 00:04:49,790 --> 00:04:50,290 ДОБРА? 100 00:04:50,290 --> 00:04:52,430 І я сказаў адвольна ён прымае аргумент. 101 00:04:52,430 --> 00:04:55,550 І гэта свайго роду Наогул шкілет тут. 102 00:04:55,550 --> 00:05:00,890 У самым пачатку, мы атрымліваем самі новы аб'ект XMLHttpRequest. 103 00:05:00,890 --> 00:05:03,830 Тады, мне трэба, каб усталяваць onreadystatechange паводзіны. 104 00:05:03,830 --> 00:05:06,970 І таму я хачу сказаць, пры змене readyState, 105 00:05:06,970 --> 00:05:10,110 Я хачу, каб вы выклікаць гэтую функцыю. 106 00:05:10,110 --> 00:05:12,570 >> Якой будзе спытаць Пытанне, калі readyState 107 00:05:12,570 --> 00:05:17,240 4, калі readyState змянілася каб быць 4, і стан было 200, 108 00:05:17,240 --> 00:05:20,799 такім чынам, мы мелі паспяховы запыт, я хачу зрабіць што-то на гэтую старонку. 109 00:05:20,799 --> 00:05:22,590 І мы будзем глядзець на прыклад таго, што 110 00:05:22,590 --> 00:05:25,010 што нешта можа быць у секунду. 111 00:05:25,010 --> 00:05:27,830 Такім чынам, цяпер я вызначыў мой ананімная функцыя, 112 00:05:27,830 --> 00:05:31,340 мая функцыя адказу, калі у readyState змены. 113 00:05:31,340 --> 00:05:37,120 >> Тады я проста трэба, каб адкрыць запытаць, выкарыстоўваючы адкрыты метад. 114 00:05:37,120 --> 00:05:39,160 І потым, я адправіць гэтую просьбу. 115 00:05:39,160 --> 00:05:41,980 І давайце зірнем на больш канкрэтны прыклад 116 00:05:41,980 --> 00:05:46,290 чаго AJAX можна зрабіць на нашых вэб-старонках. 117 00:05:46,290 --> 00:05:49,740 Так што ў мяне тут вельмі просты старонка называецца home.html. 118 00:05:49,740 --> 00:05:53,620 І я атрымаў інфармацыйны ідзе тут і свайго роду выпадальнага меню. 119 00:05:53,620 --> 00:05:55,390 >> І мы будзем вярнуцца да гэтага ў адну секунду. 120 00:05:55,390 --> 00:05:59,150 Але я думаю, што зараз мы павінны прыняць шукаць па фактычнай зыходнага кода. 121 00:05:59,150 --> 00:06:01,080 І так, я збіраюся адкрыць home.html. 122 00:06:01,080 --> 00:06:03,490 123 00:06:03,490 --> 00:06:04,740 І мы ўбачым, што адбываецца. 124 00:06:04,740 --> 00:06:08,240 Так да на самым версе тут, у мяне ёсць некаторыя рэчы, якія JavaScript адбываецца. 125 00:06:08,240 --> 00:06:12,470 >> І вось, я, відавочна, маюць DIV з ідэнтыфікатарам з'яўляецца infodiv, 126 00:06:12,470 --> 00:06:15,290 і некаторая інфармацыя збіраецца туды паехаць. 127 00:06:15,290 --> 00:06:16,374 А то ў мяне гэтую форму. 128 00:06:16,374 --> 00:06:18,081 А ўнутры гэтага форма, я нешта 129 00:06:18,081 --> 00:06:20,200 Выберыце называецца, што гэта проста выпадальнае меню 130 00:06:20,200 --> 00:06:22,150 з кучай розных варыянтаў. 131 00:06:22,150 --> 00:06:26,150 І, мабыць, калі, што змены, калі варыянт, які быў абраны мае 132 00:06:26,150 --> 00:06:30,600 змянілася, я буду называць некаторая функцыя cs50Info, 133 00:06:30,600 --> 00:06:33,190 і тады я буду перайсці ў this.value, 134 00:06:33,190 --> 00:06:35,740 дзе гэта ставіцца да які варыянт абраны, 135 00:06:35,740 --> 00:06:39,820 і значэнне з'яўляецца адным з іх тут, варыянт значэнне = роўна пуста, "Блумбэрг", 136 00:06:39,820 --> 00:06:42,610 "Боуден", "чан" і "Malan." 137 00:06:42,610 --> 00:06:45,090 >> Так што можа на самай справе адбылося тут, калі я гэта зрабіць? 138 00:06:45,090 --> 00:06:48,800 Ну, давайце паглядзець на blumberg.html. 139 00:06:48,800 --> 00:06:51,330 140 00:06:51,330 --> 00:06:53,924 Падобна на тое, што гэта проста фрагмент нейкі HTML. 141 00:06:53,924 --> 00:06:56,090 І на самай справе, што я спадзяюся, адбудзецца тут 142 00:06:56,090 --> 00:07:00,020 з'яўляецца Я збіраюся быць у стане ўключыць Гэты HTML-непасрэдна ў маёй вэб-старонцы 143 00:07:00,020 --> 00:07:02,970 без перазагрузкі старонка, так што, калі 144 00:07:02,970 --> 00:07:07,510 Я выбіраю Ханна з выпадальнага спісу Меню, інфармацыя аб Ханне, 145 00:07:07,510 --> 00:07:11,100 У прыватнасці, гэта інфармацыя тут, у blumberg.html, 146 00:07:11,100 --> 00:07:12,574 гэта тое, што паказвае на старонцы. 147 00:07:12,574 --> 00:07:13,740 І я не павінен абнавіць. 148 00:07:13,740 --> 00:07:16,842 І калі я выбраў кагосьці іншага, іх інфармацыя будзе адлюстроўвацца. 149 00:07:16,842 --> 00:07:17,550 Як мне гэта зрабіць? 150 00:07:17,550 --> 00:07:20,290 Зноў жа, гэта патрабуе нам выкарыстоўваць некаторыя AJAX. 151 00:07:20,290 --> 00:07:22,540 І так, мы адкрыем ajax.js. 152 00:07:22,540 --> 00:07:25,550 А вось у тым, што функцыя, cs50Info. 153 00:07:25,550 --> 00:07:27,410 Калі імя нічога, я вярнуся. 154 00:07:27,410 --> 00:07:31,450 Я не збіраюся рабіць што-небудзь, калі пустая опцыя была абраная. 155 00:07:31,450 --> 00:07:35,420 У адваротным выпадку, я збіраюся стварыць новы XMLHttpRequest. 156 00:07:35,420 --> 00:07:39,020 А потым я збіраюся сказаць, калі readyState змены, выклікаць гэтую функцыю. 157 00:07:39,020 --> 00:07:43,630 >> І калі гэта readyState 4 і статус 200, 158 00:07:43,630 --> 00:07:45,740 вось трохі з JQuery ў радку 13. 159 00:07:45,740 --> 00:07:50,450 Але ўсё, што я раблю кажа, змяніць змесціва infodiv 160 00:07:50,450 --> 00:07:57,820 каб быць усё, што я вярнуўся, як Адказ ад майго HTTPRequest. 161 00:07:57,820 --> 00:07:59,590 >> Якая мая HttpRequest? 162 00:07:59,590 --> 00:08:02,020 Ну, гэта дакладна тут, на лініі 18 і 19. 163 00:08:02,020 --> 00:08:08,550 Радок 18, я ў асноўным рыхтуецца GET запыт імя + .html. 164 00:08:08,550 --> 00:08:11,170 І зноў, імя тут аргумент, што было 165 00:08:11,170 --> 00:08:14,280 перадаецца ў якасці параметру cs50Info. 166 00:08:14,280 --> 00:08:18,460 >> Так у асноўным, я перадаю у чыіх-то імя, якое было, што набор опцый 167 00:08:18,460 --> 00:08:22,980 што мы бачылі ў у які расчыняецца меню ў форме. 168 00:08:22,980 --> 00:08:24,450 Я атрымліваю гэтае імя. 169 00:08:24,450 --> 00:08:29,530 І я кажу, што хачу, каб вы калі ласка, атрымаць для мяне, што file.html, 170 00:08:29,530 --> 00:08:31,020 а затым адправіць гэтую просьбу. 171 00:08:31,020 --> 00:08:34,820 >> І так, што onreadystatechange збіраецца быць слухаць і чакаць і чакаць 172 00:08:34,820 --> 00:08:39,460 і не чакаць, пакуль readyState 4, і стан 200. 173 00:08:39,460 --> 00:08:44,970 Так што гэта можна падаваць на стол, і запыт быў паспяховым. 174 00:08:44,970 --> 00:08:49,500 І потым, калі яна ёсць, яна збіраецца змяніць змесціва infodiv 175 00:08:49,500 --> 00:08:53,030 быць тэкставы адказ, што я вярнуўся. 176 00:08:53,030 --> 00:08:54,930 >> Такім чынам, давайце паглядзім, як гэта можа на самай справе працаваць. 177 00:08:54,930 --> 00:08:58,860 Такім чынам, мы над галавой браўзэры вокны, і мы будзем глядзець тут. 178 00:08:58,860 --> 00:09:01,359 Такім чынам, давайце зірнем на што адбываецца тут, у AJAX. 179 00:09:01,359 --> 00:09:03,400 Такім чынам, мы будзем выбіраць кагосьці з які расчыняецца меню. 180 00:09:03,400 --> 00:09:06,079 Такім чынам, у гэтым выпадку, давайце проста выбраць Ханна. 181 00:09:06,079 --> 00:09:08,120 І заўважце, што Ханна інфармацыя змянілася, 182 00:09:08,120 --> 00:09:11,030 але ў мяне не было майго any-- старонка не зрабіў цалкам перазагрузіць. 183 00:09:11,030 --> 00:09:12,190 Матэрыял застаўся. 184 00:09:12,190 --> 00:09:13,320 Большая частка матэрыялу засталася. 185 00:09:13,320 --> 00:09:14,320 AJAX выпрабаванняў не зменіцца. 186 00:09:14,320 --> 00:09:16,700 Сама кнопка, гэта у які расчыняецца меню не мяняецца. 187 00:09:16,700 --> 00:09:18,260 Але ёсць інфармацыя зрабіў змены. 188 00:09:18,260 --> 00:09:20,218 І ў залежнасці ад таго, як хутка мой кампутар перамяшчаецца, 189 00:09:20,218 --> 00:09:24,430 вы на самой справе можаце ўбачыць, што ўтрыманне знікае, а затым з'яўляецца сапраўды 190 00:09:24,430 --> 00:09:24,930 хутка. 191 00:09:24,930 --> 00:09:27,320 Гэта змест з'яўляецца выдалены з infodiv, 192 00:09:27,320 --> 00:09:29,940 і затым заменены на Новы асінхронны запыт. 193 00:09:29,940 --> 00:09:34,410 >> Так што, калі я пераключыць яго будзе сказаць, Rob-- і зноў, зірніце, 194 00:09:34,410 --> 00:09:38,379 і, магчыма, мы ўбачым яго на самай справе знікаць і з'яўляцца хутка. 195 00:09:38,379 --> 00:09:38,920 Вы бачыце, што? 196 00:09:38,920 --> 00:09:41,400 Як гэта проста выскачыў прэч, а затым напоўніў? 197 00:09:41,400 --> 00:09:43,640 Вось запыт AJAX роду адбываецца. 198 00:09:43,640 --> 00:09:46,060 І так у залежнасці ад чалавек я выбіраю, я 199 00:09:46,060 --> 00:09:50,690 што робіць іншы асінхронны Запыт у іншы файл 200 00:09:50,690 --> 00:09:52,730 што ў мяне ёсць на маім сэрвэры. 201 00:09:52,730 --> 00:09:55,550 І ўтрыманне майго infodiv абнаўленні, 202 00:09:55,550 --> 00:09:58,457 на падставе якіх з іх я выбраў. 203 00:09:58,457 --> 00:10:00,040 Так што на самай справе ўсё, што трэба AJAX. 204 00:10:00,040 --> 00:10:04,090 Гэта дазваляе нам, каб зрабіць гэтыя асінхронны запыты, абнаўлення старонкі. 205 00:10:04,090 --> 00:10:06,450 Без таго, каб абнавіць ўсю старонку, 206 00:10:06,450 --> 00:10:08,520 мы збіраемся, каб атрымаць новы Змест з яго шляхам 207 00:10:08,520 --> 00:10:11,170 новы свежы запыт да сервера. 208 00:10:11,170 --> 00:10:13,420 І так, нашы старонкі можа стаць трохі больш дынамічным. 209 00:10:13,420 --> 00:10:15,128 >> І, як мы атрымаем больш і больш прасунутыя, вам 210 00:10:15,128 --> 00:10:17,700 можа атрымаць такія рэчы, як скажам, ваш паштовую скрыню, 211 00:10:17,700 --> 00:10:19,850 дзе вы не павінны нічога рабіць. 212 00:10:19,850 --> 00:10:22,560 Вы не павінны націснуць у які расчыняецца меню або націсніце нічога, 213 00:10:22,560 --> 00:10:25,920 і раптам, ваш найноўшы E-mail з'яўляецца ў верхняй частцы. 214 00:10:25,920 --> 00:10:27,840 Гэта таксама проста просьба Аякс. 215 00:10:27,840 --> 00:10:30,460 Аякс просіць ваш Сервер, сервер электроннай пошты, 216 00:10:30,460 --> 00:10:33,360 адправіць па ўсёй інфармацыі аб вашых апошніх лістоў, 217 00:10:33,360 --> 00:10:38,110 і змяніць тое, што вы бачыце на Экран будзе ваш найноўшы набор электронных лістоў. 218 00:10:38,110 --> 00:10:41,080 І калі ў вас ёсць новы ў ёсць, то змест гэтага DIV 219 00:10:41,080 --> 00:10:44,580 змены будуць адбівацца абноўлены кантэнт. 220 00:10:44,580 --> 00:10:45,480 Я Дуг Лойд. 221 00:10:45,480 --> 00:10:47,500 Гэта CS50. 222 00:10:47,500 --> 00:10:49,229