DAVID馬蘭:好吧。 這是CS50,這是 9週的結束。 它在被旋風 這幾天。 與問題設置7,如果你的膝蓋 深入到它,實現有相當多 位新這是在那裡。 但是讓我們看看如果我們不能拼湊 一切都聚集在這裡簡要地 在此之前尚未在關閉於水火之中 另一個方向,看到 還有什麼地方可以去。 所以到目前為止,我們已經討論過的HTML。 我們已經談到的CSS。 我們已經談了PHP的。 你開始體驗到的SQL。 今天,我們就商量了一下 關於JavaScript。 但如何做所有這些不同的 語言結合在一起? 所以,我們上週談到了 概念有一個服務器。 所以我們只繪製這個矩形 這裡作為一個Web服務器。 和Web服務器提供一定的文件。 並且其中一些文件 可以是HTML文件。 這樣的事情之一是一個Web服務器 可以吐出可能是一個文件,該文件 我們就得出這樣的 包含一些HTML。 所以,通俗地說,是什麼 沒有HTML讓你做? 觀眾:頁面看起來不錯。 DAVID MALAN:好,使一個頁面看起來不錯, 雖然我覺得我已經證明 ,否則。 因此,HTML的確讓你鋪陳頁 結構上,它可以讓你 排序的美學標記的頁面, 標記靜態內容,讓你 然後,可以使用Web瀏覽器查看它。 但是,這是關鍵。 這是靜態內容。 你寫它,你保存它, 然後你發貨。 和Web服務器,然後提供 它給您的訪客。 但我們風格化使用不同的事情 語言完全。 我們開始使用一個style屬性 對某些標籤。 和style屬性讓我們設置 事情,比如字體大小和顏色。 而且你可能已經開始發現, 或者你很快就會進行最後的 項目可能的,但其他 屬性,您可以在CSS中使用。 所以通俗地說,是什麼 真的那麼CSS的呢? 這些只是其實例。 是什麼讓你這樣做的HTML 似乎沒有從什麼 我們已經看到了這樣多遠? 觀眾:你自己定義的樣式。 DAVID馬蘭:定義樣式 由你自己。 所以定義類的東西類作為你 可能都遇到過,還是唯一 識別文檔中的節點,以便 你可以樣式化它們。 但更確切地說,我想說的是CSS 真的可以讓你把東西 最後一公里,並允許您指定多 更精確的美觀性, 而HTML在大多數情況下可以 你組織你的頁面。 而且即使有一些默認值, 就像我們看到的標籤 一個標題標籤,它粗略地講 做事情的大和大膽。 這是一個非常通用的定義 標籤的 - 大和大膽。 什麼字號是什麼? 是什麼顏色的? 人有多大膽是什麼? 和CSS使您可以更精細地 調類的東西。 以及佈局,由於一些 你們都看到了。 坦率地說,CSS是有點 一片狼藉的語言。 這是非常強大的,你可以做 從字面上,你已經任何網站 今天看到在網絡上與它,但 它是一種在頸部疼痛。 和你們有些人撞你的頭 對牆壁已經只是做 一些愚蠢的中心像一個菜單 問題設置7,如果你已經得到了 這一點了。 但要意識到,那些事 得到隨著時間的推移更加容易。 你開始注意到模式。 再次,谷歌將成為你的朋友 在其中你可以在各種方式 解決這類問題。 我敢說使用CSS和HTML更 通常,你可以解決的問題 所有這些都很多方法,很可能 還有是正確的,比你可以 在像C,甚至 現在的PHP或JavaScript。 只是有很多不同 方法奠定的事情了。 但是,這開始變得 凌亂的,我們說。 只是那種混入你的HTML和 你的CSS的樣式屬性是 有點草率。 所以我們不是說那種, 抽象地說,那你應該 至少開始的因素 出你的CSS可能。 不是你的風格屬性,但至少 使用樣式標籤裡面有什麼 網頁的一部分? 觀眾:頭。 DAVID馬蘭:在頭部。 到現在為止,我們只有標題了 在那裡,但你也可以添加一個樣式 標記,而且你可以把你的CSS大致 發言朝向頁面的頂部。 但後​​來我們把事情一步 我們分解了更多 到一個單獨的文件中。 所以這兩個文件分別為 不知何故現在聯繫在一起。 而事實上它是 標籤,這樣做。 什麼是總體的一個 動機分解出我們的CSS 更? 觀眾:可重用性。 DAVID馬蘭:可重用性。 對不對? 你可能已經看到在對設置7已經 ,很多的網頁時, 購買頁面,銷售頁面,該 投資組合頁面,可能是 結構有些類似。 有一個CS50金融徽標上方 除非你已經決定去改變它。 有一個頁腳在 頁面底部。 和CSS允許,那麼你在要素吧 成一個單獨的文件,這樣,如果 你想在全球範圍內改變一些東西 在您的整個網站,你​​可真 只是改變它在一個地方。 但你可能會付出代價 由已分解出來的 CSS的從我的HTML文件到一個單獨的 文件與引用它 標籤,我們看到在週一。 什麼可能的缺點是這個? 回想一周前,當我們 談論HTTP和TCP / IP和如何 互聯網的工作原理。 這裡有什麼事? 觀眾:它需要更多的時間。 DAVID馬蘭:這需要更多的時間。 為什麼呢? 觀眾:[聽不清]。 馬蘭大衛:是的。 因此,它可以說是需要多一點的時間。 因為之一,CSS是很明顯 不在同一文件中。 所以,現在你必須做出不 一個,而是兩個請求。 並且其中的每個請求,因為我們所看到的 鉻在所謂的督察, 我們期待在網絡選項卡,每個 這些文件都需要一個HTTP 的要求,我們需要看到 一定量的時間。 現在,也許它不是很多。 也許這是只有20毫秒。 也許這是200毫秒。 但仔細想想,如Facebook的頁面, 或CNN,還是谷歌,這是多少 比我們的更大的示例 看著迄今。 這些網頁可能有幾十個文件, 其中每一個可能需要一個 一個文件的下載。 這樣的事情,都可能導致 開始放緩。 尤其是這些天,當大家都 擁有移動電話在我們的口袋和 較慢的互聯網連接,不必 等待幾毫秒的時間,幾 額外多毫秒 文件實際上可能會很慢。 延遲是描述字 這種等待,你有你 等待時遇到 一些信息。 但有它的好處。 所以它不是所有形式的 - 它實際上是一個位在這裡一個蹺蹺板。 現在下行,但什麼瀏覽器都可以做 如果他們是聰明的,以避免 不必請求相同的styles.css 文件又可以做什麼呢? 緩存它。 因此,緩存 - C-A-C-H-E - 一般是指這裡只是為了保存 提交您所要求的第一時間, 然後檢查你的緩存它。 檢查你的排序存儲容器, 如果你已經有了一個 styles.css的副本,即使其他一些 在p-組,或任何網站頁面, 再次請求它,只是為了給 用戶相同的緩存副本。 不要打擾請求它。 下行那裡,雖然,因為你們中的一些 已在p組絆倒。 如果你做出改變的服務器上, 你回去的瀏覽器,你 重新加載時,有時瀏覽器 你幫一個忙,不打擾 重新下載您的styles.css的文件 因為,來吧,什麼是賠率 這些樣式Facebook的使用 打算小時變更為小時或 一天一天? 這是相當低的。 他們可能會隨時間而改變,但不 按分鐘或一小時。 所以一招,只是FYI在做網頁的時候 發展,往往是按住 比如Shift鍵,然後單擊 重新加載在瀏覽器中,這將 通常是告訴瀏覽器重裝 一切,即使你已經有 它在緩存中。 如此反复,積極以及不利的缺點, 但所有的人 最終設計決策。 所以,現在,我們並不只是 在這裡結束的故事。 如果我現在回去,回去和背部 回來了,我們開始引進不只是 HTML,但是PHP。 所以,通俗地說,是什麼 PHP確實讓我們做什麼? 觀眾:[聽不清]。 馬蘭大衛:那是什麼? 觀眾:介紹邏輯 入代碼。 DAVID MALAN:是啊,介紹 邏輯到你的代碼。 所以這是一個真正的編程語言 與循環,變量,和 功能,以及所有條件,並 我們一直在使用的方式回來的東西 因為刮的時候。 和PHP,我們已經看到,可以用 或者在命令行中 - 它 不必有什麼關係 與Web,即使那是 它的真正起源和什麼時候往往 是在良好的,有利於 - 但你可以使用PHP僅僅通過自然 的,它有一個印刷(這一事實) 功能和printf()函數, 或回波()函數。 有辦法你一束 可以用PHP打印文本。 因此,您可以使用這個編程 語言準確地輸出 什麼我們之前談論。 你可以動態地生成 您的HTML。 也許不是全部。 也許你硬編碼的東西,像 頭和尾,並且標識, 和你的樣式表, 而所有這一切。 但對於像對設置7, 您要去哪裡操縱股票和 顯示用戶的投資組合,這是 要動態地改變,你可以 當然使用PHP和它給人的邏輯 你作為一個編程語言 輸出子集動態 頁面。 所以,當你談論動態網站, 或web編程,這是 你真正談論。 使用PHP之類的語言,或事物 叫Python或Ruby或Java或 但其他語言,來查詢數據庫 通常,或另一台服務器, 然後動態吐出的HTML。 現在,最終的結果,順便說一句,是 大多數網站的HTML, 包括你對設置7,可能是 將是一個巨大的爛攤子,如果 你看看源 在瀏覽器中的代碼。 這不是什麼大不了的事。 此時,當我們關心 式,我們關心的 你寫的東西。 我們不會在乎的東西 那你的代碼輸出。 所以不用擔心縮進 在這裡,如果是PHP的這 實際輸出的東西。 畢竟,瀏覽器不會在意, 和人將不會被期待 在源反正。 我們的工作人員,例如,將 在看你的PHP。 所以,現在讓我舉一個簡單的例子 否則為什麼這可能是有用的。 所以坦率地說,我不記得最後 一次我用C來解決一個問題, 現實世界中。 這可能是在讀研究生時 我需要使用的語言 是相當低的水平,給了我 做的東西非常高的機會 執行真正保存盡可能多的CPU 盡我所能,在很大程度上週期 因為我用的是龐大的數據集, 每個CPU週期數。 坦率地說,即使是在手機之類的東西 這些天,其他設備 在那裡,你不太有盡可能多的 內存和你不太有 太多的CPU,採用更快的語言 仍然有吸引力。 但在現實世界中,當你只是 想拋出一些程序一起 分析一些數據,或者你已經收集 一大堆註冊 一些學生組,並且希望非常 快速自動發送郵件 一個由一到每一個 註冊,你要達到 高級語言 比C可以這麼說。 類似PHP或Python或Ruby, 或半打其他存在 這些天。 但是,這三個可能 現在最時髦的權利。 這是什麼意思是,你可以打開 一個文本編輯器,如gedit或 大部分其他事情,然後就開始 編寫代碼,而不必擔心 編譯,而無需 真的擔心內存管理, 雖然,一點點牢記 草率最終會回來 如果數據集得到咬你 較大或問題得到很大。 但是這意味著什麼 我們的是以下內容。 讓我繼續運行的拼寫 從問題設置6。 所以這是我基於特里實施 我用大 董事會在那裡我表現不是那麼好。 我們會回來的一個星期的時間, 重溫那些誰也結束了頂上 大板在我們的最後一次演講。 但現在,讓我繼續前進,只是 運行文字,我的解決方案,我們會盡 國王詹姆斯聖經,在這裡我們去。 因此,這些都是假想 出拼寫錯誤的單詞 國王詹姆斯聖經。 和我實施了 半秒總。 所以,這不是太糟糕 特定的計算機。 但認為多少 代碼中,我不得不寫。 想想你有多少代碼寫。 想想你花了多少時間在 D-大廳或你的宿舍或其它地方 實際上編碼的解決方案。 好吧,如果我真的有一個較高的水平 語言,如PHP,請注意 在這裡我能做些什麼。 首先,假定,這是代替 分佈代碼。 這是一個名為的拼寫。 這是今天的一部分可作為 分發代碼。 我要揮揮手最 的細節,但是這實際上是 一個有趣的例子,如何 你可能語言移植 像C到PHP。 我硬是開了兩個文本窗口, 1我C版speller.c的, 我只是在我開始翻譯 前往PHP和打字使用 最接近的等效功能。 所以這些東西有些是不同的。 上一次我們看到,PHP不使用 包括在以同樣的方式。 它使用需要通常情況下,雖然 包括確實存在。 定義稍有不同 在C#定義,但是這 我們如何做一個常數。 $ ARGC事實證明,在PHP中,存在 因此,我們已經看到過。 這些僅僅是變量,所有 開始與美元的跡象。 回想這些都只是一堆 浮動點。 所以長話短說,歡迎你來 翻閱如果好奇的話,這是 幾乎一條線換線轉換 C版speller.c到PHP。 你能做到這一點再次 半打其他語言。 但有趣的是這一點。 坦白地說,令人沮喪的 是這樣的。 讓我繼續前進,鍵入有關 dictionary.php,我的要求 要繼續前進,並重新實現 問題在這裡設置了6。 因此,讓我們第一次提出,在這 文件,該文件將實施 PHP的,所以讓我開我的標籤那樣。 讓我給自己一個全球性的 變量$尺寸變零。 我要給 自己一個哈希表。 為這件事,我將使用一個哈希表。 我如何宣告一個哈希表,在PHP中呢? 完成。 確定。 因此,開放式支架接近支架代表 在PHP中,正如我們已經看到的? 一個數組,而是一個數組,可以 是一個關聯數組。 關聯數組 一種數據結構, 聯營鍵與值。 現在在簡單的數字作為索引 陣列,這些鍵是什麼? 零個,一個,兩個,三個,對不對? 舊學校的東西回來從C,但它可以 類似foo是字符串,酒吧, 麥克斯韋,或任何這樣的字符串。 這樣我就可以利用這一點 在短短的時刻。 讓我繼續前進,並宣布 這樣的函數 - 讓我們做的load()第一。 所以load()函數。 和PHP是一個有點不同, 你從字面上輸入功能,但你 不鍵入一個返回類型。 我要繼續前進,並說, load()函數應採取 參數$字典,只是 做像C版本。 我在做什麼,從內存中。 我建議我 要做到這一點。 我只是做的foreach。 我要調用一個函數叫做 文件(),通過那名 文件,它是變量 $ $字字典。 然後在裡面我的for循環在這裡,我 要繼續前進,並存儲在我的 $表$詞得到真實的。 Done(完成)。 哦,等等。 Done(完成)。 確定。 那就是load()函數 說在PHP。 現在,為什麼這項工作? 樣的,我欺騙在這裡。 因此,一,的foreach我們看到 簡要最後一次。 它只是意味著你可以遍歷 沒有與我打擾數組 n和加上加號,和所有的。 詞典當然是文件名, 像大或小,這兩個 我們的字典使用最後一次。 文件是打開了文本的函數 文件,按行讀取它的路線, 你的雙手背一個巨大的數組, 每個其元素是一個 線從該文件。 所以這是的FOPEN相結合, 用fread和while循環,和fclose的, 而所有這一切。 最後,詞只是意味著這就是 可變我要去訪問 在這個循環中每次迭代。 因此,在短期,在這裡單行指 開拓其名稱是在文件 字典,變量,迭代 但每次得到的時間逐行,和 一條線,存儲在一個變量叫做字, 然後做一些事情的話。 我想要什麼做的? 我希望把字到我的哈希表。 好了,我可以把東西在我 哈希表類似於C 使用方括號。 這是我的哈希表的名稱。 我要索引的散列 表在這個位置。 所以不是零括起來,不括起來的。 支架報價引文的東西, 不管這個詞是。 而且就像你可能在你的 哈希表的工作特里,你只是存儲 實際上是一個布爾值,隱式 或明確。 Done(完成)。 我存儲的值為true。 現在有幾件事情 我就割這裡的角落。 從技術上講,有將是一個 惱人的新生產線,/ n在年底 這些字。 所以我也許應該調用PHP函數 所謂的印章(),這將 毫不誇張地砍了斷。 而且我確實需要 做一件事。 我也許應該增加尺寸上的每個 迭代,所以我跟踪 它是什麼全球。 坦率地說,這是一 PHP的愚蠢問題,如果你是 使用全局變量,你需要 明確地說,你是。 所以,我要實際鍵入全球 $規模,全球$表,現在 我的功能是完整的。 所以不是那麼簡單過,但 大概花了比C時間少 版本,也許? 確定。 所以,現在讓我們做的檢查()函數。 讓我們來看看這至少拿了 幾個小時就結束,它把我們的C。所以 讓我繼續前進,並宣布 檢查的功能。 發生在說法的話,這是 從哪兒來的拼寫。 而我只是要檢查 下面的變量使用isset,表 字的支架用strtolower - 讓我們來平衡我所有​​的括號 - 然後返回true。 其他 - 這是真正的硬 這項計劃的一部分。 否則,返回false。 Done(完成)。 這是檢查()。 現在,為什麼這工作? 那麼,一個我通過一個字, 它是一個字符串。 二,我檢查的哈希裡面 表,誰就是所謂的$表。 我迫使它通過調用為小寫 一個函數的tolower()的非常相似 C,但這樣做的整個單詞, 不是一個單一的字符。 如果它被設置,也就是說有 是一個值設置,換言之, 如果這是真的,那麼, 這是一個字。 因為我把它放在那裡與負載()。 如果沒有,我將返回false。 現在,其他人很容易。 功能尺寸(),我該怎麼辦呢? 我基本上是做回​​$大小。 但我在技術上需要 這樣做討厭的事。 而實際上聽到了,我被切割 一個角落裡太多了。 我真的需要做全局$表中。 但話雖如此,卸載)。 卸載()是驚人的。 功能卸載()。 我想得到怎樣實現卸載()? Done(完成)。 確定。 所以卸載(),內存管理是 完全採取為你照顧 像PHP和很多 的高級語言。 因此,這是驚人的。 像你到底為什麼我們花了過去 八加週的C寫的 顯然很慢,真的時間 消費問題與數十小時 根據我們的皮帶工作? 那麼,對於一件事,這可能工作 精緻的小程序。 這當然加速了我 開發時間。 但是,讓我們看看會發生什麼 在現實世界中。 讓我進入這個目錄 在終端窗口。 還有的拼寫。 並注意順便說一句,你可能會 已遇到問題該設置 六,問題設置7。 你不必嚴格到 結束PHP文件與書籍。php。 如果你把一條線一樣,第一次以 極頂,這是一個特殊的行 語法,基本上意味著找到 叫PHP和使用它的程序 解釋這個文件。 所以現在沒有人真正知道, 我運行一個PHP程序。 我可以運行它,就好像它 被編譯的東西在C 但這裡的東西。 其實,讓我們再次做到這一點。 Dropbox/pset6 /。 還有的拼寫。 確定0.44秒。 它得到了更快的這段時間。 現在,讓我們進入PHP版本。 很好的接觸。 但只是覺得多少時間 我保存於辦公時間。 確定。 所以3.59秒,這實際上 聽起來並不準確要么。 那是因為長話短說, 當你打印出一個巨大的數額 東西到屏幕上,那 本身會減慢速度。 什麼是真正把CPU中的 家電為3.59秒,在 相反,C,歷時0.44 秒最近。 這是真正的命令 幅度不同。 那麼,是這個價格來自哪裡? 為什麼這麼慢得多? PHP為什麼表現如此糟糕? 達尼埃爾? 觀眾:你不會是真的 使用一個哈希表。 DAVID馬蘭:我真的不 使用一個哈希表。 所以,我有種做。 所以這是一個關聯數組。 最有可能的,如果人們在PHP都是 真的很聰明,他們用下面的 引擎蓋實現一個實際的哈希表 在像C或C + +。 不過。 嗯。 觀眾:[聽不清]。 馬蘭大衛:是的。 所以,每一個我現在寫的功能 - 實際上,你可以說,一旦更多的是 大聲一點好嗎? 觀眾:每個函數 您收錄了很多更全面 能力比 - 馬蘭大衛:所以這是非常真實的。 還有很多更多的開銷,我們是 不是真的由只注重看 dictionary.php,我只是寫。 與此相反,有一個整體解釋器 將在後台進行。 事實上,當我運行這個程序時,它 沒有運行編譯零和壹 專為我的英特爾CPU。 相反,它是由線運行線路 PHP代碼看起來完全 像我們鍵入它。 所以每當你使用 解釋型語言,你 其實也付出這個代價。 這將需要一些時間來閱讀 您的文件從上到下,從左 右,然後執行各 線連連。 現在在現實中,尤其是在網絡上, 實際上你可以加速這一進程 通過緩存的結果 PHP代碼被解釋。 而這是有道理的在網絡上,因為 如果你還沒有一個用戶喜歡 我在這裡,但1,000或10,000個用戶,然後 也許是第一次該文件是 訪問它的緩慢,但此後 它的速度更快。 然而,這也再一次是一個權衡。 而對於一個類似的研究數據 設置,甚至一些大的像 這一點,你的用戶將最終 開始覺得放緩。 因此,在短期,解釋語言 非常流行,非常受歡迎, 坦率地說可能是你的語言 要達到解決問題的時 到CS50後續。 但要意識到你是多麼真的 理所當然的引擎蓋下 真的那些過去的幾個星期中的散列 表和樹,並嘗試, 這是用來實際上最終 實現類的東西打開支架, 方括號,這是我們現在可以 感激地想當然。 因此,讓我們來看看現在 在本網站範圍內。 和我上次提到的有 在PHP中一堆超全局變量的 是不是真的有關 在命令行中。 他們是在上下文中更相關 用在web環境的PHP。 因此,為了在Web服務器上運行PHP 生成的東西,如HTML。 我們看了一眼$ _GET和$ _POST和 這就是自動用戶 輸入端起來簡單,如果你提交 形成在結尾的文件。關於php的網頁 服務器類的設備。 但是,讓我們簡要地看 $ _COOKIE和$ _SESSION。 通俗地說,什麼是Cookie作為 你了解它的背景 使用網絡? 觀眾:文件的計算機上。 馬蘭大衛:是的。 它是在用戶的計算機上的文件 用任何網站栽 你碰巧訪問。 所以當你去到Facebook,當你去 到bankofamerica.com,當你去 到google.com,當你去到幾乎任何 網站在世界上的這些天, 包括cs50.net,一個cookie種植 您的計算機上,這是 無論是存儲在RAM中的值的 計算機在您的瀏覽器的內存,或 有時確實是一個文件存儲 在您的硬盤驅動器。 ,什麼是通常存儲在該文件中 是不是你的用戶名,而不是你的 密碼,通常不是 敏感的,除非該網站是不是這樣 用好他們的安全,而是 它是其中一個很大的唯一標識符 其他的事情。 這是一個大的隨機數栽在您的 計算機,但你能想到的作為 有點像從虛擬郵戳 一個俱樂部或者一些遊樂園的 使工作人員介紹,業主 服務,要記住你是誰。 因此,如果大的隨機數是一樣 12345678,儘管這顯然 不要太隨意,認為那是的 郵戳,當您訪問 facebook.com首次,它們 郵票上的手數。 然後,因為你講的HTTP,您 是一個瀏覽器,並因為Facebook 顯然可以使用相同的網絡 服務器,該協議的HTTP說, 任何時候你隨後參觀 facebook.com,無論是第二 以後,一個小時後,甚至在第二天, 所以只要你有沒有明確 註銷,其有效 就像洗手。 HTTP說,你應該出示您的 用手戳你每次 返回到該網站。 Facebook上有什麼不那麼它們是 看那個郵戳及 他們說,哦,123456789。 我不知道第一眼就這 是大衛·馬蘭在劍橋, 馬薩諸塞州,但他們可以檢查自己 數據庫和說,哦,這個人 在其計算機上,我們種植123456789 是大衛·馬蘭劍橋, 馬薩諸塞州。 讓我們顯示,用戶隨後他的個人資料 頁面或他的新聞聯播。 但這裡有一個問題,如果這 是如何網絡確實。 讓我們來看看一個簡單的例子。 其實,讓我們去說facebook.com。 但在此之前,我們可以去那裡,讓 我去進取,不斷開拓Chrome的 這裡督察下降。 讓我看看“網絡”選項卡。 現在讓我們繼續前進,並鍵入 在https://facebook.com。 我這樣做,讓我們看不到 所有那些重定向和廢物 經過了那麼多的時間去尋找。 讓我按回車鍵。 好的。 我們看到一大堆的請求。 有自帶臉譜。 有一個整體的一堆文件。 而在這裡,我提到每 去年延遲時間,這是 很多的HTTP請求。 但是,第一個可能是 最有趣的。 因此,讓我們在這裡向下滾動, 我會在第二放大。 這將是一種 一個爛攤子,但讓我們來看看。 Facebook正在向我們發送 一大堆東西。 但是,哇,有意思。 他們種植不是一個,而是四個 到這裡我的手手郵票。 設置Cookie,設置Cookie,設置的cookie, 設置的cookie。 有幾個功能。 他們提一些 樣的到期。 它看起來像Facebook是希望 記得我,直到2015年。 所以這是大概的時間 我必須註銷或他們就會 自動假設我 不回來了。 所以,這實際上是一個體面 的時間量。 還有一些其他的 事情就在這裡。 此cookie被強行 刪除的說,它在1970年屆滿 餅乾之前存在。 因此,瀏覽器只是 承擔OK,就像 洗滌雙手郵票。 但現在當我的瀏覽器,使 後續請求 - 讓我繼續前進,這樣做 並重新裝載。 現在讓我回滾動 頂部的請求,並下井 在這裡,請求頭。 請注意這一點。 所以我現在在不響應頭 但要注意它說,請求頭。 注意到我的瀏覽器的一部分, 其要求有擊球重裝後 發送至少以下 信息。 沒有設置的cookie,但cookie中。 因此,這是行,HTTP頭,所以 說話,我的瀏覽器排序 沒有我知道它的呈現 我的手為Facebook的檢查。 因此,這些cookie可以 使用的是什麼? 要記住你是誰,或記得如何 多少次你去過那裡,或 真的沒有什麼東西。 因此,這裡是counter.php。 並讓我的字體放大。 而每一次我重新加載頁面,請注意 記住多少次 我一直在那裡。 嗯,這是不是所有的,令人印象深刻。 讓我們只關閉該選項卡, 現在讓我們回到 http://localhost/counter.php。 哦,那很有趣。 它仍然記得,即使 雖然我關閉標籤。 坦率地說,如果我關閉瀏覽器, 如果以正確的方式實現,我 還記得該用戶 誰他或她是第一次, 只有一次,我去到Chrome的菜單, 在這裡在這裡,去 歷史,並單擊“清除瀏覽數據, 你們有些人可能有 過去,只有這樣,你的餅乾 實際上在網上被刪除 的發展。 所以,如果我們去 - 讓收盤上漲gedit的。 如果我們現在去這個文件。 讓我進入我們的 虛擬主機/本地/市民,並讓我做 counter.php。 請注意,這是一個相當 簡單的程序。 這是一個非常簡單的網站。 因此,在文件頂部 是僅有評論。 但在這裡,你可能是一個新的行 已經看到,已經在一套七對, 在session_start()。 這是一條線的PHP代碼, 基本上告訴Web服務器, 一定要杜絕的手,使 一定要檢查手的郵票。 這是這一行的,它 這一進程我們。 然後注意到我剛剛拿到了 這裡的兩個分支。 如果計數器的關鍵,在這裡面 特殊的全局變量稱為 $ _SESSION - 換句話說, 如果有一些價值 - 讓我們得到它,並將其存儲在本地 變量名為$計數器。 否則,我們的分配計數器 默認值0。 現在,這裡的一個方面的PHP 既是祝福,也是詛咒。 PHP是一點不馬虎。 因此,而在C語言中,會是什麼 計數器的範圍已經 無論是在這裡或這裡? 這本來被限制 那些大括號。 你猜怎麼著? 在PHP中,它的存在甚至外面的那些 大括號,在這裡,在這裡, 在這裡,在這裡, 甚至向下跌破。 所以我說這是一個祝福在這個意義上 你不認為,作為 我們最大的努力幾週前做。 但它也是一個位一個詛咒 無論你在哪裡使用變量 PHP的,至少在這樣的程序, 它的全局訪問 或好或壞。 所以,你必須要記住,現在 可能是不確定的變量。 您可能已經定義了他們在別處。 但是我最終要做的事情嗎? 我要去,全球內儲存 的值,作為變量 計數器鍵的結果 做計數器加1。 因此,這僅僅是算術 做 該計數器遞增。 而事實上,我存儲 在這裡的返回值是手段 基本上是將數據庫更新到 記住,一直是用戶123456789 這裡兩次。 而當我再次這樣做,下一次我 重新加載頁面時,它要檢查 我的手蓋章,說,哦, 現在有用戶123456789 來過這裡三次。 還等什麼PHP和類似的語言 這樣做對我們來說是他們盤算 如何以及在何處以及多長時間 存儲在這個特殊值 超全局。 而這個超級全局下一次我 訪問的頁面是有點神奇 預填充,填充值 在那裡你訪問的最後時間, 這是否是在一秒鐘前,一個星期 前,或在2013年,我們現在談 大約在2015年。 PHP和Web服務器打理 的所有的給你。 觀眾:[聽不清]。 DAVID馬蘭:PHP中的變量是 本質上始終是全局的,除非你 在函數中聲明它們, 然後他們是本地的 該功能只。 但是因為我沒有寫任何 功能,他們現在有效 全球在我這裡整個文件。 觀眾:是否有辦法 讓他們本地的? 馬蘭國寶:有沒有 方法,使他們本地的? 只有通過包裝成的功能。 這在最新版本的 PHP中,你可以用這個做 一個匿名函數。 但更多的,在 JavaScript的情況下。 但簡單的答案是否定的。 較長的答案是肯定的。 尼斯。 良好的測驗問題。 好的。 所以最後,頁面本身是 其實很簡單。 請注意,一旦我退出PHP模式,召回 所有的這些東西下來 下面只是要得到吐 出生到瀏覽器。 這是很好的,因為我也想送 一些HTML,但我確實希望用戶 動態更新HTML。 我可以做到這一點的方法之一是進行排序 非常迅速回落到PHP 模式,採用開放式支架問號 等號,然後輸出值 的計數器。 或者,如果這看起來有點神秘,這 等號,其實只是一些 語法糖這 的printf($計數器)。 但坦率地說,這只是一點點醜 和一點點討厭的類型。 所以PHP的非常漂亮,提供此功能 在那裡你可以說它更 簡潔地以同樣的方式。 那麼什麼是底下怎麼回事 油煙機? 讓我們來快速瀏覽一下網絡 選項卡這裡counter.php。 讓我繼續前進,第一 讓我們來清理cookies。 因為讓我們清除瀏覽數據 剛開始的時候。 現在,讓我們回到了這裡。 現在讓我們來重新加載頁面。 而我回到零。 因為我的手的郵票已經洗淨, 我現在得到一個新的cookie。 事實上,如果我看網絡選項卡, 看響應頭,另行通知 該設備是給我 他的名字是有點一個cookie 隨意但那種, 合理,PHPSESSID。 並且它送我這真的 大隨機數。 這不是不少。 它不是相當的十六進制。 這是某種字母數字字符串, 但據推測這是隨機的。 那就是郵戳所以 說話那我指的是。 同時,如果我重裝一下,然後 看看這個第二行第二個我 要求,現在通知我的要求 頭文件包含PHPSESSID等於這一點, 沒有設置cookie的,但只是餅乾。 這是我的瀏覽器的演示文稿 我手裡的郵票。 所以,現在作為傳情,我們將討論更多 這在一個星期左右,但 以什麼方式這使你 脆弱的,你的Facebook帳戶 脆弱的,和其他類似 賬戶脆弱? 觀眾:如果有人有你的cookie。 DAVID MALAN:是啊,如果有人 有你的cookie。 我是說真的,就像你們中的一些 可能試圖在像一個俱樂部或 遊樂園,如果你嘗試的東西 這樣的複製郵票,雖然 倒退到另一個人的手, 然後他或她提出它作為 自己的,如果它實際上看起來確實 同樣,123456789,那麼網絡 服務器顯然只是要 相信,該用戶就是你。 這確實是一個根本性的 威脅你使用cookies的任何時間 因為如果有人只是欺騙所以 說出你的cookie,計算出它是什麼 是,無論是真正的將其複製 通過看你的電腦 和被喜歡,確定。 大衛的cookie是JJ3JIK等等, 然後他們夠聰明,知道 怎麼樣的手動發送 從瀏覽器或一個cookie 計劃他們寫,他們完全可以 登錄到一個網站,你​​。 它是不是很難假裝 別人,除非我們重新對集 2,介紹什麼? 觀眾:密碼學。 DAVID馬蘭:有點 密碼學位。 簡單的密碼系統,至少在 標準版,但加密 不過。 少。 所以,事實證明,如果你加密所有的 這些頭文件使用的東西,你 現在可能知道作為SSL的詳細親切, 安全套接字層,或https://開頭的URL, 那麼所有的這些事情,我們一直 瞥了一眼實際上是加密的, 這意味著它就像你 無法讀取郵戳。 只有facebook.com可以了,或者google.com, 或者在這種情況下,該設備可以 閱讀郵戳。 可悲的是,雖然,並再次,這是 太合適了NSA的東西 後期,甚至是SSL是易碎的。 它實際上並不難 即使破解了加密。 沒那麼通過破解加密了, 但通過欺騙的 瀏覽器到解密 數據過早。 但同樣,我們會挑逗你 與之前長。 現在,只是害怕。 它是可悲的一種真實。 好的。 因此,如果沒有這個現在離開我們呢? 那麼,讓我們做到這一點。 讓我們繼續前進,並採取快速 傳情之前,我們休息一下。 我想我們會一直這樣時間長一點 今天,但我們要潛入 一些全新的性感,這將 激起你的食慾,甚至更多。 所以這是玩笑話。 因此SQL,我們開始談論 曾經如此短暫最後一次。 你會真正得到你的手臟 有一些它在對設置7。 和通俗地說,這是什麼SQL - S-Q-L - 為你做點什麼? 這是什麼? 是啊。 觀眾:讓您存取數據。 馬蘭大衛:是的。 它讓你的數據訪問 在數據庫中。 結構化查詢語言。 這實質上是一個 編程語言。 有它的功能, 我們不會在課堂上什至使用。 但是你可以有效地 定義函數。 他們被稱為存儲 在SQL過程。 但我們會保持它相當簡單,只是 使用它的一些基本操作 如選擇數據,插入數據, 更新數據和刪除數據。 而你真的可以想到一個數據庫, 就像一個SQL數據庫,只需 即Microsoft Excel中。 因為SQL是指一個關係 數據庫,其中 就只是意味著表。 行和列。 所以,只要你可以把電子表格 這樣或谷歌文檔, 你可以放入一個SQL數據庫 通過聲明一個表。 現在,你如何實際訪問 這些信息? 那麼,與命令或 查詢是這樣的。 SELECT,INSERT,UPDATE和DELETE。 並且在大多數情況下,這些都是 你需要到四只成份 做的東西很有力 在問題設置7。 現在又回到了一天,你居然會 在一個數據庫交互 黑色和白色終端窗口 閃爍的提示是這樣的。 而我們在運行數據庫 器具被稱為MySQL的,這是 自由和開放源碼的數據庫引擎。 如果谷歌和閱讀維基百科 的文章,你就會知道這個名字是 對於一些有點過渡 Linux版本。 瑪麗亞數據庫實際上是一個 叉這麼說的MySQL。 長話短說,甲骨文收購了MySQL。 甲骨文是一家大公司。 人們一直擔心,它會 不再停留相當開源, 所以這是MySQL的只是一個副本,這是 還是免費的,還是開源的, 默認安裝在Fedora Linux系統。 但是,這是一種在痛 脖子上結識一 數據庫這種方式。 所以我們在CS50包括家電 一個免費的開源工具,稱為 phpMyAdmin的。 僅僅是巧合 它是用PHP編寫的。 有沒有根本 需要為PHP在這裡。 但是這僅僅是一個基於Web的工具, 我們免費下載,安裝在 家電,這使我們能夠有一個 與該圖形用戶界面 探索對集合7個數據庫 要創建新的數據庫, 說為自己最後的項目,如果你願意 像,並最終創造 動態網站像CS50財經 使您可以查詢數據和 動態更新數據。 你不會有只使用 一個簡單的文本文件或CSV。 實際上,你可以使用智能資料庫 程序使您可以執行更多 不僅僅是閱讀複雜的查詢 通過線性的一切。 因此,例如,這就是我們給 你對P-集合7個盒子。 這是顯然的至少一個表 三列,其中之一是 用戶名,其中一個是散, 而另一個是識別碼。 但有趣的東西,只是為了 這裡梳理出一個念頭,用戶名 大概是已經獨一無二的,對不對? 我的意思是,幾乎所有的網站,如果 你有一個用戶名,有 不能由兩個凱撒。 不能有兩個malans。 不能有兩個jharvards。 其獨特的。 否則,他們不知道哪個 jharvard它實際上是。 所以,可能是什麼動機也 具有在左邊的第三列 還有所謂的ID,它看起來像一個 數字是同樣獨特之處? 感覺有點多餘 我第一眼。 為什麼它可能引人注目的有 不僅是唯一的用戶名, 而且唯一的數字? 觀眾:他們可以有 相同的密碼。 DAVID馬蘭:人們可能有 相同的密碼,確保萬無一失。 這可能完全發生。 但是,如果他們有這樣的唯一的用戶名,我 會說,其實並不 事,因為如果他們在鍵入他們的 用戶名,我只需要檢查他們的 密碼,其自己的哈希值。 否則為什麼? 觀眾:更快速的搜尋。 DAVID馬蘭:更快速的搜尋。 為什麼呢? 觀眾:ID是只有一個。 DAVID馬蘭:ID是一個字符, 或者更確切地說,它是一個數字, 因此它可能是32位 或者類似的東西。 而用戶名,顯然傑森 赫塞豪恩的上升有幾分 可笑的長,而且它要 帶我去了很多時間轉換為字符串 比較H-I-R-S-C-H-H-O-R-N,也許 一/ 0或類似的東西,為了 查找傑森,而不是僅僅 說給我的用戶排名第二。 這是32位。 它是一個單一的詮釋 你要比較。 事實上,這也正是為什麼數據庫 傾向於分配唯一的ID來 列在其中。 現在,還有什麼其他的數據類型是有 除了INT和明顯 像這樣的字符串? 嗯,更正確, SQL數據庫,如 MySQL中,有煤焦領域。 和char一個有點誤導 不是一個單一的煤焦。 在MySQL數據庫是一個char場 一個或多個字符,但它是一個 固定數目的字符。 因此,舉例來說,如果我去到 phpMyAdmin的,因為你可能已經或 很快將問題設置七,和我一起去 到我的數據庫,只是為了好玩, 讓我們來創建一個新的表稱為 測試只有兩列。 我會然後單擊“轉到”。 這將成為相當熟悉, 尤其是當你鼓搗 在自己的周圍。 在這裡,我可以鍵入ID來創建 INT類型的新表。 但在這裡我可以鍵入用戶名 重新早些時候表。 注意到我有一大堆 類型可供選擇。 而這也就是為什麼phpMyAdmin的 是一種不錯的。 這是一種自我教學, 可以只是一種點,然後按一下, 在下拉菜單中,並推斷 ,什麼權力SQL給您。 事實上,如果讓我選擇CHAR,然後我 有指定長度,或者如何 許多價值觀,多少個字符。 所以很普遍的價值觀之類的東西 255,但是這是一個有點長。 通常是8個用戶名。 但是,這是小了點,這些天。 因此,這是一個設計決定。 最多8個字符, 32,255,1000? 它真的給你。 但是,煤焦場是一個固定數。 因此,選擇太少,你是那種 擰緊,如果你想有一個較長的用戶名。 選擇太多,什麼是 缺點? 觀眾:[聽不清]。 DAVID馬蘭:這是一種浪費。 就像在C中,如果你有一個更大 你比你需要的內存塊, 只是在浪費時間和浪費的空間。 因此,作為一種替代,存在 VARCHAR,解決了這個問題 處理而不是作為一個固定長度的長度, 但作為最大長度,並使用 可變的字符數,然後 往往只使用盡可能多的字符作為你 的實際需要。 這聽起來很完美的。 我們為什麼不擺脫了 CHAR數據類型,然後呢? 可能是什麼缺點 使用VARCHAR的,這聽起來 就像是一個不錯的雙贏? 是嗎? 觀眾:[聽不清]。 國寶馬蘭:OK,好。 所以,如果你的數據是一樣的 長度,有什麼值得關注? 觀眾:因為你在浪費 告訴他們所有的數據。 DAVID馬蘭:所以,如果您的數據是 相同的長度,不過,我認為 ,指定的最大長度 在VARCHAR是沒有什麼不同 如果指定一個固定長度的CHAR 你知道提前號碼。 但確實是有,我會整理 從這個問題的答案提取現實 還是有一個最大,這可能 是惱人的,特別是如果你 遇到一個人的名字,這是 你沒有特別長 預料到的。 而且,這也是少高效 實際上搜索VARCHAR的 搜索字符的,尤其是反對 長條桌,有很多 大量的數據。 所以在這裡也再次專題 沒有明顯的選擇。 因此,只是給你一個其他感 您可能會感興趣的數據類型 無論是對一套七或 未來,INT。 有BIGINT, 就像是很長很長。 它往往是64位。 有小數,你會看到 設置的問題,這是一個非常 吸塵器的問題的答案,我們 遇到浮浮 點不精確。 再有就是DATETIME。 有字面上的數據類型 看起來像一年,一個月,一天, 小時,分鐘,秒。 但是,SQL數據庫也有 的事情,我們會打電話給索引。 和一個指數的東西,你 創建表的時候指定 搜索和其他操作 更高效。 具體來說,有一種叫做 你可以在主索引 聲明如下。 我們這樣做是為您提供 用戶表,我們給你。 但是請注意,如果我是手動重新創建 這裡的用戶表給 它的用戶名。 我已經指定的ID。 我指定的詮釋。 我指定的用戶名 最多32個字符。 但是,如果我們繼續在這個相當滾動 寬大的窗戶,看到有一個 一堆其他的事情,我可以指定。 一,我可以指定屬性 喜歡,你知道嗎,這 詮釋應該是無符號。 我不想負數, 所以讓我們做無符號。 空是不相關的,因為這裡 我希望每個用戶 有一個唯一的編號。 我不希望它是空的。 但是,這很有趣。 我可以指定該ID要么是 這個數據庫主鍵,或者它 獨特,或它的索引或全文。 因此,對於今天的目的,很長的故事 總之,主要手段,這將 概念上和技術上都 我們用獨特的領域 識別用戶。 所以,當我們仰望用戶來說,這是一種 的承諾,看看他們大多是由 那唯一的標識符。 數據庫將確保,如果你 有一個用戶號碼3,你不能 物理插入另一用戶 具有同樣數量3。 該數據庫將只是拒絕 保存您的更改。 這是一件好事,因為你可以 從自己保護自己。自我 另外,對於用戶名。 所以排第二,召回, 是“用戶名”字段。 因此,第二行是用戶名, 因為我們所做的遠遠離開那裡。 所以,我要指定什麼? 我不允許的,根據SQL, 指定兩個主鍵。 您可以指定一個聯合密鑰,你 看著這兩個領域,但他們不能 分別是主鍵。 所以這是不可能的。 所以,這可能我想選擇? 好吧,獨特的是在精神上有類似 在那裡你指定這個主鍵 域應是唯一的,但它的 不會是一 我用所有的時間。 而且我們不打算使用這一個所有 時間為的是什麼了嗎? 它的速度較慢,如果可能 這是一個漫長的用戶名。 這只是在浪費時間。 指數,同時,指定它的 不會是唯一的,但我想 你的工作你的魔法下的 油煙機,使其更快地為我 搜索這個領域。 因此,這可能不是與此有關。 對於用戶名,我要說的卻是 獨特之處是一個很好的答案。 但是假設我們做了更多用戶 不僅僅是用戶名有意思, 哈希,和身份證號碼。 如果我們給了人們充分的名字呢? 如果我們給他們的地址 以及關於它們的其他數據? 好吧,如果你指定了一個列 數據庫建立索引,這意味著 的MySQL或Oracle,或者任何數據庫 你使用,應該工作它的魔力 並使用某種奇特的數據 就像一棵樹,或一個線索,或結構 哈希表,什麼保證 當你使用搜索數據 選擇在那個特定的領域 - 就像告訴我大家, 住在牛津街。 查詢這樣的。 如果事先已指定 你想在該領域中的指數, 搜索將是非常非常快。 如果不指定索引,最好 你可以做的是,如果一個線性搜索 它沒有排序。 但如果指定索引,智能 人誰做的資料庫 - 你這樣的人誰知道現在樹 並試圖和哈希表 - 會自動建立這樣一個數據 結構在RAM中,以確保 這些搜索速度更快。 FULLTEXT同時也是世界上精神相似, 但可以讓你做通配符 搜索,就像告訴我大家, 住在開頭的街道 字母O無論出於何種原因。 你可以做通配符搜索 這樣的。 或者,像表演更引人注目的東西 我大家誰都有這個詞 - 告訴我每個人都為名稱開頭 與一個特定的字母。 您可以搜索關鍵字 在這種方式。 好的。 因此,設計機會 可能有。 另外有一些人,我會 我揮動雙手。 事實證明,你可以有 不同的存儲引擎。 這是更神秘的比我們需要的 肯定是問題設置7。 默認情況下,你們正在使用 一些所謂的InnoDB。 你會看到提到這個地方在 phpMyAdmin的界面最有可能的。 但是要知道,還有其他的設計 這是潛在的決定 興趣來最終項目是否 你做一些基於Web的。 但是,讓我們做到這一點。 讓我們繼續前進,把這點 屏幕作為傳情的故事 包括你,一個室友, 和一杯牛奶。 讓我們在兩分鐘 左右突破這裡。 如果你能留下來,讓我們來 回來了,看起來有點多在SQL和 然後有點用的JavaScript 對設置在腦海8。 好的。 所以,讓我們給你思考一個 可以非常容易出現極端狀況 在使用數據庫,或上下文 坦率地說,即使使用真實世界的事情 像自動取款機取錢。 所以這裡有一個冰箱。 假設你已經有一個了 你的宿舍或者你的房子。 你已經得到了一個室友的都有,和 你真的喜歡牛奶的實例。 所以,你回家從類一天。 他或她還沒有回來。 你打開冰箱。 你真的想要的一大杯牛奶。 有沒有牛奶。 所以,你會怎麼做? 你關閉了冰箱。 你搶你的鑰匙。 你出去到廣場。 而你在得到線在CVS的那些 自助結帳的東西,它總是 需要更長的時間比實際 有收銀員。 總之。 那麼,與此同時,小點小點小點,你的 室友回家,他或她 類似地具有一個渴望 對於一些牛奶。 於是,他或她打開冰箱, 看起來裡面,哦,該死的。 沒有牛奶。 於是,他或她領導了,偏偏去 到其它的CVS,只有這是一個 方框相差出於某種原因,他或 她會在網上買一些牛奶。 同時,你回家的時候,他或 她回家,和做什麼 你最終有嗎? 兩倍的牛奶。 但你真的不喜歡 牛奶那麼多。 所以,現在你有這麼多的牛奶,現在 其中之一是剛準備去酸 最終。 所以這是一個非常糟糕的問題。 對不對? 所以,發生了什麼事? 所以從根本上,這是一種 荒謬的例子。 但引擎蓋下,我們已經有 在這裡發生的是你們兩個檢查 某一段的狀態 存儲器,該冰箱。 你們倆檢查狀態 一些變量。 你們都畫了一個結論, 那你再採取行動。 但不幸的是,當你的室友 是在商店,那狀態 變變了,他或她回來 現在想改變狀態,但 它已經被改變 他或她。 當然,他或她會不會有 去商店,如果他們知道 您已經在途中。 所以,在現實世界中,你怎麼能這樣 避免這個問題,假設你有 冰箱,你有一個室友, 而你居然喜歡牛奶? 觀眾:溝通。 DAVID馬蘭:溝通。 確定。 但如何可能你溝通? 觀眾:留一個便條。 DAVID馬蘭:留一個便條,對不對? 總是留下一張紙條,為 該節目的球迷。 好吧,所以總是留下一張紙條,或 把真正喜歡一個掛鎖或某事 上,讓您的冰箱 從檢查的狀態室友 該變量。 現在,為什麼會這樣有密切關係 問題設置7,或到自動取款機。 那麼,想像在一個ATM的世界裡 你也許可以去到一個ATM 機器在這裡,並在這裡另一個自動取款機。 而這經常發生。 並假設您有兩個ATM卡, 這有可能獲得。 和您登錄到兩台機器 同時有效,希望 雖然沒有人在找。 然後你在你的PIN碼輸入 大致同時。 然後,你做一個查詢餘額 就看你有多少現金。 讓我們說你有100元, 留在您的帳戶。 所以基本上同時,你 說一,零,零,輸入。 而你希望拿回一些錢。 但多少錢可能你回來? 現在在一天結束電腦, 特別是如果他們在跟誰說話 服務器,不一定做的事情 在該命令中的預期。 因此,假設會發生什麼,因為, 無論網絡速度問題有 是,或CPU的問題有​​,或 這樣的事情,假設 第一台ATM檢查您的平衡和 看,哦,這個人有100元。 但隨後被分心,因為也許 備份正在發生,所以它的 放緩。 或者,也許在檢查時,網絡 連接有一點點慢,因為 這只是發生。 他們是物理設備。 如此同時,第二ATM是 問同樣的問題。 多少錢,大衛有哪些? 100元的答案。 但是,因為第一個ATM尚未 發送的消息減去100元,兩者 自動取款機已視察該銀行的金庫, 看到有100美元那裡,而現在 兩台機器都可能 要吐出一個答案。 現在,這是偉大的,你在某種意義上 如果銀行做什麼,最終 由量改變至負100 設置變量等於你 銀行賬戶等於0,而不是 幹嘛減去100。 現在,在最壞的情況下為銀行 - 或者在最好的銀行,同時, 他們給你200美元, 您的銀行帳戶現在顯示負 100元,這確實不 有利於你的。 但問題是,這個比賽 條件兩個室友越來越 牛奶,或兩個自動取款機試圖獲得現金 和更改保管庫的狀態 在同一時間存在任何 時間,你有一個數據庫。 現在,在問題設置7,本次發行 出現在這個意義上,如果你買了 股Facebook股票,然後對 比如你買的第二份額 Facebook股票,你需要做 決定作為編程器。 為了決定如何更新 數據庫,賠率是你要 有一個行的股票,而這 是實現它的方法之一。 而你將有一股 FB,這是他們的股票代碼 這個用戶名,或該用戶 ID,該唯一標識符。 但是,同樣的故事可以發生在這裡。 如果你做一個選擇在SQL中,你會看到 在問題設置7,當你看到, 哦,大衛有一股 Facebook股票。 現在讓我改變這是兩股, 因為他想買一個 第二份額。 但是,假設大衛實際上有兩個 瀏覽器窗口打開,或假設 它與夫妻雙方聯名賬戶, 和他們兩人都試圖執行 相同的操作,有,同樣, 可能存在的決定是 基於以前提出 世界上的國家 - 該帳戶擁有一股股份 - 並且兩個人,或者兩個服務器,現在 試試再說吧遞增到兩股。 但在這種情況下,您可能已落案起訴 我的錢為股份,但 增加只是一次。 所以,總之,最根本的問題 在這裡,與笑話留下 注意,或把掛鎖就可以了,是 如果兩個人,或者兩個線程 - 回想起刮 - 可以檢查一些變量的狀態 然後試圖更改變量, 但這兩件事情不要發生在 同一時間,但可以被打斷 其他的事情發生,數據可 進入一個非常奇怪的狀態。 而且你可以受益,或者您可以承受 在金錢例的意義。 因此,在問題設置7,我們給你 這一行代碼,其中長 總而言之,解決了這個 問題在MySQL。 這個很長的指令不 甚至適合到上一行 屏幕在這裡可以確保您的操作 是所謂的原子。 這一切都發生在一次,或者 它不會發生的。 這個很長的短語不能 得到部分中斷。 和它做什麼簡直是 它說什麼。 插入一些表如下 三場的那些特定的值, 但重複鍵, 不要做一個插入。 做一個更新。 因此,這就像做一個SELECT和 INSERT可以這麼說在同一時間。 什麼是關鍵這可能是 被引用到這裡? 事實證明,你會看到這一點 問題設置7的規格,因為 我們已經宣布那裡是一個唯一的密鑰 這個特定的表上,使得 你不能有多個行 用於與相同的用戶 同樣一分錢的股票代碼 - 在這裡這個例子中,DVN.V是 一個愚蠢的仙股,我們 是指在規範中。 因為我們已經宣布它是唯一的, 這是什麼意思是,如果你 嘗試插入重複行,你 而不是去而不更新它 任何人有機會改變 世界上的任何國家。 因此,在短期,這確保 事情是原子的。 更一般地,雖然,數據庫 如MySQL - 而你不需要這個功能的 對設置7,但請記住它的 未來 - 支持所謂的交易, 在那裡你可以說 從字面上START TRANSACTION。 然後,您可以執行 兩個SQL語句。 和一個SQL語句,你會看到 在對設置7,顯得有些 這樣的事情。 更新的表中調用帳戶。 設置餘額列等於什麼 目前餘額欄 是減去1,000,其中的數量, 帳戶號碼,如用戶ID, 等於2,然後更新 賬戶點綴點點。 因此,在外行人的術語,什麼這兩個 查詢似乎在做的 銀行業的現實世界有意義嗎? 觀眾:轉移到儲蓄。 DAVID馬蘭:沒錯。 從一個轉移資金 向另一方。 這是另一個例子,你 真的想這兩件事情發生 或不會發生。 你不想要的東西,得到的 他們中間,有可能陷入困境 算算,還是搞砸了多少 錢,你有,或有多少 錢的銀行都有。 那麼什麼是真正好的關於交易 在MySQL的是,和 數據庫更一般地,是它們 以及誰已經實現的聰明人 這些特性弄清楚如何使 確保兩個的事情發生 或根本沒有。 如果你是真正有志於做 這是由人使用的網站上 校園裡,人們在現實世界中,做 東西在啟動意義上說, 這些都是種 設計決策 變得比以往那麼重要。 否則,你就開始失去數據,輸 用戶,或者在最壞的情況下為 我們在這裡看到的,潛在的 賠錢。 如此反复,更多,在問題設置 7,還有可能對某些 你在最後的項目。 因此,讓我們改變圖片中我們有 剛才只是一種方式。 因此,讓我能不能我居然看到 - 不,那已經走了。 在那裡,它是。 所以這是我們離開最後一次。 而事實證明,我們要去折騰 一件事情到這裡混 - 一個名為JavaScript語言。 所以,JavaScript實際上適合 進入這片 - 而且我也不太留有足夠的空間, 所以這不是現在的規模。 OK,這是值得同情的。 好了,這就是JavaScript的。 好的。 我真的這樣做了倒忙。 好的。 因此,JavaScript是另一種編程 語言和我們的最後,有沒有什麼幫助 放心,有沒有什麼更 的消防栓在這裡。 這樣的JavaScript也是一種解釋 語言,這意味著你不 它編譯成零和一。 你只要運行它。 但是,什麼是有根本不同的 JavaScript的通常是你 不要在Web服務器上運行它。 它不會在運行 家電本身。 相反,它就會被用戶下載 通過HTTP到他們的瀏覽器 - Chrome瀏覽器,Safari瀏覽器,IE瀏覽器, Firefox的,不管是誰 - 並且它是執行這個瀏覽器 特定的編程語言。 所以要清楚,PHP迄今已 無論是執行在命令行 我們的黑與白的窗口,在服務器上 像設備,計算機 喜歡該設備,或者它已經 由Web服務器執行 在計算機上運行。 但這裡的主題是,PHP迄今 已被執行的服務器端,所以 用戶和用戶的瀏覽器 永遠看不到一行PHP代碼。 事實上,如果你曾經打開一個瀏覽器 您的網站或其他和你 實際看到的PHP代碼在你的窗口, 有人搞砸了。 因為它並不意味著是 直接發送到一個瀏覽器。 它應該被執行轉身 成類似HTML。 但JavaScript的本質 相反。 它的意思是典型的內部運行 的用戶的瀏覽器窗口。 和使用什麼類型的網站 然後,JavaScript的這些日子? 如同字面上每個受歡迎的網站。 每一個網站,你​​們大概 每天使用使用JavaScript的 最簡單的,甚至 最性感的特點。 因此,像Fac​​ebook的 聊天,如果您使用。 如何實際工作? 以及迄今,所有的東西,我們已經 完成了HTML和PHP假定 你拉了一個網址,你敲回車, 和你看到一些HTML內容。 而你點擊鏈接,即改變 網址,改變了頁面,並重新加載 一些新的內容。 點擊另一個URL或者提交一個表單,你 獲得護送到另一個頁面, 你看到了一些新的內容。 但使用類似Facebook的聊天, 或Gchat,或谷歌地圖,很少 沒有整個頁面刷新,使得 你看到一個白色屏幕片刻, 然後新的內容。 更確切地說,網頁今天是動態 再次得到更新 一次又一次的所有排序 幕後。 而事實證明,當你去 像Facebook或Gchat, 或Gmail和頁面更新 無自動重裝 整個屏幕上,發生的是, 您的瀏覽器已排序的秘密 額外的HTTP請求 - 不是整個網頁,但只為 數據的小的塊,如 即時消息,你的朋友剛剛 送你,或狀態的更新, 剛剛有人送你,或鳴叫 有人剛剛發。 它只是讓小請求 數據,然後使用JavaScript,這 編程語言,要改變什麼 網頁看起來像沒有 服務器的幫助,無需服務器 生成的HTML。 所以,總之,可以使用JavaScript的再 不僅從獲取新數據 無需重新加載整個服務器 頁面或提交表單。 它也可以用來改變 所謂的DOM - 文檔對象模型 - 這僅僅是看中方式 說的HTML的樹 我們看到最後一次。 所以安撫,JavaScript是 所以語法類似於C為好。 有沒有主函數。 你剛開始寫代碼 它會得到執行,或 更恰當的解釋。 條件如下所示。 無異於C或 PHP為此事。 布爾表達式或 - 編在一起 看起來就像這樣。 相與在一起看起來像這樣。 交換機將看起來像這樣。 for循環看起來會像這樣。 while循環看起來會像這樣。 做while循環看起來會像這樣。 這是新的。 所以,JavaScript有沒有一個foreach 構造本身,而是該構建 對於變量i的數組,和我在這 情況變成一個索引值。 因此,它是從一點點不同 的foreach,雖然新版本 JavaScript的是走出來的時候, 因此,即使這些語言特性 正在不斷發展。 並順便說一句,JavaScript的這些日子 也可以用一台服務器上一樣 使用PHP名為Node.js的框架 一個CS50的轉錄因子,凱文,導致一 研討會上的Node.js這是可在 cs50.net/seminars。 所以,如果你很好奇,知道你 可以在服務器端作為使用本 好了,但是這是一個相當新的趨勢, 但一個強大的一個。 這是一個有點不同。 這是在JavaScript的數組。 什麼打你不同 與C或PHP? 這裡有幾個簡單的故事 我們可以在這裡告訴。 現在缺少對PHP的? 觀眾:[聽不清]。 DAVID馬蘭:怎麼了? 對不起,再說一遍嗎? 觀眾:不聲明 變量的類型。 DAVID馬蘭:我們不會宣布 變量的類型。 所以,其實蠻喜歡PHP的,我們不是 指定該變量的類型。 相反,我們更一般 話說變種變量。 我們沒有的PHP的滋擾 美元符號,這雖然繁瑣 類型,並讓更多的清楚, 什麼是一個變量。 而在這裡,我們是有點回 C'S方法只是通過調用 按我們想要的變量名稱 給它,像數字。 也像PHP,我們有 方括號內為 該數組內的值。 在JavaScript中這樣的變量也 可能是這樣的。 注意這裡,這是一個稱為S字符串, 但同樣有我們沒有指定 這是一個字符串。 這裡雖然是一種功能,不 存在於恰好在PHP中相同的方式, 但有點類似。 這是在JavaScript中的對象。 而對象是類的瑞士軍刀 的數據結構中,你刀 可以將它們用於任何數量的東西。 在這裡,例如,我們正在聲明 一個變量名為報價。 該變量的類型 是一個對象。 你可以認為這是一個C結構 有鍵和值。 符號是一個關鍵。 FB是一個值,顯然 股票代碼。 逗號。 價格是另一個關鍵,它的值是 顯然是浮點,或一個 更一般地在數字 的JavaScript49.26美元。 所以,PHP不具備 - 我們還沒有看到PHP對象相當 像這樣,但我們也看到一個模擬, 這是什麼? 觀眾:[聽不清]。 DAVID馬蘭:關聯數組。 因此而PHP有關聯數組 其語法是有史以來略等 不同的 - 我們看到了方括號。 我們看到了奇怪的箭頭符號。 JavaScript有對象,但這是 大多是語義差異和 不同的同義詞了。 不過,順便說一句,PHP也有 在某種程度上對象的Java及其他 語言有對象 面向對象的編程。 但是我們將使用這些剛 對於數據類型了。 對象和關聯數組。 這其中可能使 更加清楚一點。 這也是為什麼一個對象是非常有用的。 當你想聲明一個學生, 像Zamyla,我們實際上可以 封裝可以這麼說那裡面 使用花括號,就像反對 一大堆鑰匙的前 在這裡值。 我們有一個ID,一個房子,一個名字 Zamyla,後跟一個分號作為 通常在最後。 到這裡也一樣,這是稍微 不同,但也很強大 這些天。 下面是一個數組,我知道,因為 有一個方括號起來 頂部和方括號 在底部。 這就是數據的數組 在JavaScript顯然鍵入? 這是它的外觀的陣列 像三個物體。 我知道這只是一個對象 因為大括號。 並注意有大括號, 有些東西,右大括號,逗號, 然後一些,逗號, 然後一些。 所以,這三個參數 用兩個逗號隔開。 因此,這是三個對象的數組。 並且其中的每個對象似乎是 一些學生或工作人員 排序,每一個ID, 房子,和名稱。 但我已經叫這東西 所謂的JSON - JavaScript對象表示法。 這是一個數據格式,實際上 那麼很受歡迎,在 時尚這些天,如果你寫了一個 使用Facebook應用程序 API,Twitter的API,真的差點 任何API在那裡這些天, 包括一些CS50自己的 你回來的數據是不是在 老同學CSV格式。 因為回想一下,CSV 超簡單。 這僅僅是分開列 用逗號。 JSON數據給你更多的元數據。 它有關聯的每個值一個鍵,以便 他們不必只是假設 第零列是一個數值,列 一個是另外一個,第二列是另一回事。 在這裡的JSON對象一切都是排序 自我描述的,因為每一個 名字在這個文件中的一個具有字面 在它前面的名稱為 帶引號的字符串。 因此,讓我們來看看一個 幾個例子在這裡。 讓我去到設備。 讓我進入我們的虛擬主機 目錄進入公眾。 讓我進入 JavaScript的目錄。 讓我們去進取,不斷開拓 DOM-0.html,其中的DOM只是意味著 文檔對象模型。 這是樹的東西到 我前面提到的。 讓我提出以下建議。 下面是它的一個網頁 身體是非常簡單的。 所以這兒的底部, 注意到我有一個表格。 我們以前見過的那些。 它有兩個輸入端,其中一個具有一個 其中一個名稱標識,有一種類型的 提交,並且所述第一 一個人的類型是text。 因此,這實際上聽起來很簡單。 讓我們在這裡。 讓我們回到這個頁面在這裡。 讓我們進入本地主機,並進入 我們的JavaScript目錄,並轉到 DOM-0,在這裡,我們有這樣的形式。 所以這是很明顯 所有的頁面一樣。 它有一個名字字段 一個提交按鈕。 但我不打算在這裡使用PHP。 我將盡一切客戶端 所以要如下在JavaScript中發言。 請注意,我確實賦予的名稱 這個輸入領域的獨特 標識符,這實際上 救我一些時間在一個時刻。 並注意我介紹另一個標籤 在我的網頁的頭部,  標記。 因此,它是在這個意義上說,JavaScript是 一個客戶端編程語言。 在這種情況下,就像CSS,我已經把 它直接在我的HTML。 但請注意,我已經聲明的函數 看起來有點像PHP 語法,但其實這是 JavaScript的,因為再次,它是 客戶端在瀏覽器中。 並以此來猜測這是什麼打算 這樣做,即使有些語法 這裡是新的。 觀眾:問好誰。 DAVID馬蘭:這是怎麼回事打招呼 對誰訪問這個頁面。 那麼,如何? 因此注意到,原來在JavaScript 有一個alert()函數。 這是一個非常可悲的排序功能, 真的只是往往惹惱用戶。 這不是一個你真的應該使用 通常情況下,但它是一個快速和骯髒 這樣的排序打印的東西 到的圖形用戶 接口,就像一個瀏覽器。 請注意,在這裡,我已經有了一個 字符串中的單引號。 事實證明,與C,JavaScript的 其實可以有使用單 報價,坦白說這只是一種 當中的文體公約 JavaScript程序員 使用單引號。 PHP的,他們實際上有輕微 不同的意義。 但現在,只要知道 這是唯一的原因。 在JavaScript中的約定往往是 使用單引號,但我們可以用 兩地雙引號為好。 因此,這是有趣的。 記得最後一次,我們有這樣的 圖片,吸引了一棵樹在屏幕上 在那裡你有HTML節點, 頭節點,身體節點 然後一些文本。 但是有在一個特殊的節點 極頂,我稱為文檔。 嗯,事實證明在JavaScript中,任何 時間你寫在JavaScript程序 在瀏覽器中,您可以訪問 一個特殊的全局變量。 類似的精神,PHP的超全局變量, 這個就是所謂的 全部小寫的文件。 這就像一個結構,但這種結構 也有在其內部功能。 因此,一個C結構只是有數據通常。 但由於這是一個JavaScript對象 在技​​術上也有功能, 否則稱為方法 裡面的它。 而且你可以調用一個函數內 這個對象毫不誇張地做了 名,點,和然後的名稱 的功能,或再次方法。 這只是一個代名詞,真的。 而這是什麼功能呢? 那種你可以從它的名字猜測。 通過ID獲取元素。 因此,這是要搜索的網頁, 搜索那棵樹,尋找 任何節點,AKA元件,具有 的報價引文名唯一的ID。 然後我該怎麼辦? 我要得到裡面的值 在樹中的節點,我要去 以某種方式打招呼該名稱。 因此,需要一種猜測,即使我們還沒有 看到這一步,做什麼的加 符號的意思是在這裡和這裡可能? 觀眾:串連。 DAVID馬蘭:串聯。 右,而這些都只是 樣的設計決策 人民年前。 在PHP中,您連接 東西點。 在C語言中,你通過幾個跳火圈和 像打電話或strcopy功能() strcat的()或其他這樣的功能。 但在JavaScript中,可以使用加號。 所以這只是串聯 三個字符串 - 你好,一個名稱,然後 感嘆號。 所以,什麼時候,為什麼是這個函數 所謂的關係嗎? 那麼,採取從一個猜測 HTML在底部。 為什麼迎接()調用,或者什麼時候? 顯然,盡我所知道的,在 提交,當這個表單被提交, 我要採取一切 這裡面的引號。 具體而言,我要去打電話 迎接(),然後返回false。 好吧,讓我們來看看網 效果這裡是第一。 因此,讓我繼續前進,鍵入 ,譬如說,羅蘭,提交。 您好羅蘭。 讓我們來看看,也許這只是 幸運的實施。 不。 所以它的打字了什麼 我的名字居然放在那裡。 但是請注意,什麼是不發生變化。 該網址仍是DOM-0.html。 有沒有register.php。 有沒有第二個文件。 有沒有action屬性。 那麼,什麼是這個返回false 大概是在做什麼? 為什麼我打電話問候(),然後 返回false可能? 當你點擊什麼通常發生 提交,即使我們有一個表格上 在過去的一周見過? 觀眾:[聽不清]。 DAVID馬蘭:它去的地方,對不對? 它使用了一些目標URL。 但我不希望這樣的發生在這裡。 我想我的網頁是完全 動如Gmail,即一旦你 在那裡,你呆在那裡。 該URL不的方式,改變 表示整個頁面重新加載。 相反,我只是想改變一些東西 像打印出來的東西 這裡在屏幕上。 那麼,讓我這個清洗 一點點。 讓我開不DOM-0,但 讓我打開DOM-2。 只要你在這裡看到了一些語法。 事實證明,我們剛才 沒被使用原始的JavaScript。 因此,這是真正的語言 JavaScript的。 你們當中有些人可能知道的 一個庫名為jQuery的。 所以jQuery是不一樣的 事為JavaScript。 這只是一個圖書館,一個真正聰明的 小伙寫和推廣這樣的 幾乎世界上每個人現在 使用JavaScript時,使用jQuery。 乍看,說實話,它 看起來多了幾分神秘。 但你會發現,特別是如果你去 在那裡你與網絡最終項目 發展,你會發現,這 做清理工作,並節省您不少 幾行代碼。 因此,讓我們只要看一眼如何 這種形式的工作。 請注意我怎麼去掉明顯 從我的HTML嗎? 有沒有關於提交處理程序 可以這麼說。 有沒有屬性。 因為你知道, 我真的不喜歡? 我覺得我們被碎成 到老習慣那裡。 就像它開始感覺邋遢 交融既與CSS HTML,因為你是那種扔 不同的語言遍布 的地方,同樣也該開始感覺 像一個壞的道路往下走的地方 我把JavaScript代碼在我的 HTML,而不是保出來。 所以,這是這裡的一課。 在DOM-2.HTML,我保出來。 和我正在做的事情略有 不同。 現在,我要揮揮手 在這到底是什麼呢 引擎蓋下方。 但就現在假定,首先 代碼在這個庫行 所謂的jQuery只是意味著當 文件準備好後,請執行以下操作。 因為網頁可以採取 一段時間來加載。 你可能會在一個緩慢的互聯網 連接,並且它可能被紡 和紡紗,最後它的加載。 這行代碼只是說等到 整個頁面已準備就緒,文檔 準備就緒後,在執行這個程式碼。 現在發現,這可能是 最有用的第一 採取遠離的jQuery。 這裡這條線是非常相似的精神 這更長的線在這裡。 而在原始的JavaScript代碼,有 存在一個全球性的文檔對象, 有一個稱為的getElementById()的函數, 誰寫的人 jQuery的簡化了,只是說 美元符號,然後在裡面的 括號把兩個引號,然後 把一個散列符號後跟 你想抓住唯一的ID。 因此,這是相當於 的document.getElementById。 同時,。遞交僅僅意味著對 提交任何形式的你是 參照左側,去 前進,執行這個。 但是,這是現在的好奇心了。 有什麼奇怪的是什麼 我在這裡強調? 它不僅是一種語法 新的,另外還有一些人失踪。 觀眾:這只是調用的函數? 這不是叫提醒? 馬蘭大衛:是的。 好了,所以提醒()是跌 這裡,是公平的。 但沒有提到的 命名,就像你知道的,或富 東西在這裡。 事實上,這是特色之一 JavaScript的那是相當的 功能強大,但也相當新的。 和PHP居然有這一點。 讓我繼續前進,做 一些真正的快。 讓我繼續前進,把這個在這裡。 讓我這樣做。 功能。 讓我們把這個處理程序()。 處理函數可以這麼說。 處理一些操作的東西。 讓我收拾我的壓痕。 並把這個在這裡。 並把在這裡。 沒錯。 確定。 所以現在我有一個函數調用 handler()的,我真的不知道 它做什麼呢。 它只是仍然擁有的東西。 哎呀。 花了太多。 讓我們做到這一點。 好的。 抱歉。 好的。 讓我這樣做。 確定。 這看起來不錯,直 現在推進。 讓我這樣做。 做到這一點。 和確定。 所以,現在,讓我們把在這裡。 沒有編程上飛。 確定。 所以,現在,讓我們回到 故事開始的地方。 以前,我說,這條線在這裡 意味著當文檔準備好了,去 進取,做到這一點。 我想要做的是什麼呢? 那麼具體而言,我想去 進取,做到以下幾點。 執行這行代碼,然後 我要你做的是調用這個 功能,當表單被提交。 現在,這就是有趣的。 這本身不是一個函數。 請注意,我不是把括號 在以正常的方式。 我從字面上傳遞一個函數調用 handler()的另一個功能 提交()作為一個參數作為 雖然它像一個變量。 ,這是一個功能的 JavaScript中,函數本身 真的是剛對象。 事實上,他們真的只是 某種變量。 並且如果函數的名稱是 handler()的,也沒有理由我不能 在這裡作為一個參數傳遞給它。 這意味著,當表單 與演示的ID是 提交,調用這個函數。 但現在如果我撤消了這一切, 那為什麼我也許做 這一刻前? 那麼,這是一個匿名函數。 因為坦率地說,我才意識到我為什麼 浪費時間困擾聲明 函數調用處理程序()只調用 在一個且只有一個地方? 如果我沒有需要的名字,我不 需要調用多個地方, 讓我們只是實現的功能 我需要它的地方。 所以JavaScript和PHP支持 被稱為匿名函數 請允許我做的正是這一點。 但我們只是表面。 讓我們的挑逗,只是一對夫婦 最後的例子在這裡。 如果我進入quote.php。 請注意,這實際上是一個PHP 函數,我寫一個PHP程序 預計HTTP參數調用 符號,我可以通過在 FB這樣的值。 如果我們實際上看一下源 代碼,這是一個免費的網站查詢 雅虎財經,就像對集 七,它返回給我 顯然的東西 是JSON格式,稱為 - JavaScript對象符號。 這只是一個對象。 注意花括號,引號, 冒號,逗號。 同時,現在這是很酷。 因為我也許可以使用一種編程 語言生成URL 看起來像這樣動態 對不對? 我可以改變這是谷歌 並獲得谷歌的 股票價格1,017.55美元。 因此,讓我們來看看,如果我們現在不能使用此。 讓我去AJAX-0在這裡,這 看起來像下面這樣。 這只是一個網站,有 一種形式的按鈕。 在這裡,讓我繼續前進,鍵入YHOO 雅虎的股票代碼,點擊獲取 報價,現在發現我已經得到了 一個警覺32.86。 讓我真正去票友版本 此頁,版本二, 讓我們的類型微軟MSFT說。 獲取報價。 現在注意到,沒有警報。 請注意,如果說價格 被確定的? 是最簡單的例子是 提示在什麼Gchat和Facebook 聊天,和Gmail,其他如 通過實際的網站正在做的 改變網頁。 請注意這一點。 讓我重新加載頁面。 讓我打開Chrome的督察。 讓我去的元素 選項卡在這裡。 現在可以看到,如果我在這裡變焦和 打開這件事,注意,這是我 HTML DOM - 我的文檔對象模型。 這是我的HTML。 但是現在注意到,儘管這是怎麼回事 是一個有點難以看到它在兩個 一次的地方,如果我在FB中鍵入 在這裡,看底部 的屏幕。 它實際上是在改變 我的HTML飛。 它這樣做很簡單, 通過做這樣的事情。 如果我打開了AJAX-2,注意實施 性感的東西 ,即使它是相當難看, 但複雜 功能,它有一些 HTML的底部。 但是請注意,我用的標記。 我們不使用此之前,但是這是 就好了,但它不強制 一切都邁上了一個新行。 它只是使一個矩形區域 基本上是在同一行上。 請注意,我給它一個ID的價格。 和事實證明,通過使用相同的 JavaScript庫,我有一個函數 稱為引號(),這就是所謂的時 表單被提交。 我在做什麼。 我聲明一個變量在JavaScript 稱為URL,保存價值 quote.php符號=。 換句話說,我現在開始 準備一個HTTP請求,然後 我串聯到加的 任何的元素的ID 符號,而該通知是 文本字段就在這裡。 因此,就像我們在過去的形式。 然後原來的jQuery,如果你 調用值(),它要求一個值 功能,價值功能,即得到 無論用戶已鍵入英寸 然後把所有的網絡流量 出現這種情況是這樣的。 $。的getJSON。 而作為一個不談,美元符號 只是一個速記符號。 這真是jQuery.getJSON。 讓我到JSON從這個URL,而當 請求回來,稱此 函數並傳入作為參數 無論來自服務器返回。 所以,換句話說,如果我回去 瀏覽器了,我回去quote.php, 什麼我的瀏覽器正在做的是越來越 這個塊的數據。 當我去這個網頁在這裡, 注意,如果我們不是去網絡 選項卡,然後清除它,然後鍵入 像歌谷歌和獲取 引號,注意頁沒有改變。 但一個HTTP請求是,什麼 回到這裡,如果我們看一下 響應是一大堆的JSON 我們訪問的最後用 這個簡單的線條在這裡。 數據是得到了 從服務器。 價格的名義 關鍵我在乎。 所以data.price給我的。 現在同時,與此 是最後一個例子。 你可以做了更多的頁面。 實際上之一,還有兩人。 我們可以帶回 標記,如果你還記得這個。 這就是JavaScript的。 我們可以做到這一點。 非常令人興奮的。 我們把這個作為一個懸念。 但更令人興奮的是,你可以 做這樣的事情。 如果我去的地理定位-1,它的出現 認為Chrome知道我們是在 緯度經度42.37,-71.10。 因此,有更多的有 在您的處置。 但更多的是在下週。 星期一見。