2009-10-10 53 views
4

我正在MySQL/PHP/Javascript中構建一個webapp。AJAX - PHP通信模式

在PHP中,我已經獲得了域中的所有類,並保留了數據庫中存在的問題。 在Javascript中,有一個來自上次查詢的對象的緩存。

當Javascript中的對象被用戶更新時,它必須在服務器端進行更新。這將是最好的方式來做到這一點?

我應該在PHP和Javascript中創建一個用於通信目的的類嗎? Javascript中的每個對象是否應該根據需要更新的對象的類別向其他php文件發送AJAX查詢? 有沒有什麼模式可以解決這個問題?

回答

1

如果這是一個任意大小的項目,爲每個類創建一個單獨的PHP文件肯定會更易於維護。它也允許你做類似於基於類的不同服務器級認證的事情。

在JavaScript方面,你肯定需要某種AJAX庫,無論你自己把它放在一起(我曾經在約50行JavaScript中做過一次),還是使用其中一個。您可能需要一個幫助函數或兩個知道如何序列化數據(XML,JSON,分隔符,等等)的幫助函數。

您可以在JavaScript中編寫面向對象的代碼,如果您已經這樣做了,那麼添加write()或updateServer()方法來調用帶有正確參數的AJAX庫以保持一致性是有意義的。如果你沒有寫OO代碼,它可能有獨立的功能,但只有當你有多個地方需要保存這些對象時纔有意義。

+0

因此,在你看來,JS中的每個原型應該有PHP文件作爲屬性調用,updateServer()應該將信息發送到這個PHP文件(每個類一個)? – Gerardo 2009-10-10 20:34:03

+1

如果JS中的「原型」代表一個實體,那麼是的。這完全是關於封裝。我並不是說每個JS原型都應該有一個PHP文件。我在說JS和PHP都應該封裝系統工作的每個實體。這樣做的副作用是雙方都存在的任何實體都會有原型或文件,但這不是目標。封裝是。那有意義嗎? – 2009-10-11 04:15:06

0

我想你應該看一下PHP和JavaScript的REST ful API。您將域模型對象作爲唯一資源(例如/ application/books/1)。如果您只想實現CRUD功能,那麼更新相應域模型的通用控制器(例如使用ORM工具,如Doctrine)應該足夠了。

如果你真的想在JavaScript中的客戶端有相同的模型取決於你的應用程序。我喜歡在客戶端管理一個單獨的JavaScript對象的想法,該對象將通過REST加載,然後填充到HTML表單中併發送回作爲JSON(或作爲一個簡單的表單提交)到服務器。如果客戶端模型理念吸引你,我推薦看看JavaScript MVC,它有一個非常有趣的模型實現。

1

大多數AJAX框架(jQuery等)會發送一個'HTTP_X_REQUESTED_WITH'頭集到'xmlhttprequest'。我喜歡用這個來決定使用哪個視圖。

這意味着可以使用相同的url通過JavaScript檢索JSON,XML或HTML代碼片段,或者在標準GET/POST請求發出時返回完整文檔。

這意味着如果用戶禁用JS,您的應用程序將簡單地恢復爲正常請求。