2009-10-14 57 views
1

目前,我正在使用自己的MVC框架。我想要做的就是用jQuery做一個Ajax調用(取下那部分),然後從控制器調用一個方法,以便我可以將get變量傳遞給它並獲得我想要從Ajax調用返回的輸出。使用Ajax請求調用類

我不能刷新頁面,因爲它是一個完整的表格頁面,我不希望每個上一些刷新重置。我也不能將它傳遞給一個「handle.php」,我可以擁有我需要的功能,因爲模型和控制器的要點是什麼?

我該怎麼辦?或者更重要的是,處理這種事情的最佳方式是什麼?我可以再次加載我需要的類(因爲我使用的擴展,需要大約6個)並實例化一個調用適當方法的新對象?

我想這是我自己的努力打造,而不是學習的東西像Zend的我自己的MVC框架的錯,但什麼是木已成舟。任何幫助將不勝感激,只需要指出正確的方向。

回答

1

從你的問題來看,有點難以找出你試圖獲得什麼樣的數據。你需要獲取數據填寫表格嗎?或者您是否需要使用PHP腳本將數據從表單傳回數據庫?

在這兩種情況下,我想'handle.php'腳本可能會正常工作。只需製作一些可處理傳入數據的基本腳本,驗證它並加載相應的類(可能使用__autoload)將其保存在數據庫中。

+0

基本上,我有一個名爲遊樂場網頁。我希望它能夠有各種我正在測試或玩的東西。就像一個窗體是一個隨機的單詞生成器,而另一個窗體則需要文本來從字符串的一端向另一端應用漸變。只是隨機的東西,實際使用很少。 但我想使用ajax,因爲我不想重置表單,並且我有將來的計劃將某些表單作爲先前表單的輸出的innerhtml。另外,不想爲此使用會話。 – NeoTubNinja 2009-10-17 18:21:48

1

你很可能想向頁面發出請求,就像調用其他控制器/方法組合一樣。例如,假設您正嘗試呼叫控制器Ajax和方法更新 ...您希望有URL路由,因此您只需鏈接到/ajax/update。這是理想的解決方案。

在這樣你會想你的呼應效果,而不是試圖顯示模板/佈局/視圖組合的方法。這可能意味着你需要調整你的CMS以允許這樣的事情,但希望不是。

您的方法更新應該更有可能訪問全局變量$ _POST和$ _GET,以便您可以檢索從AJAX請求提交的數據。

+0

我目前的網址方案是/ page/action/query。因此,如果我在頁面上進行搜索,它會看起來像/ books/search/plato。調用類「書籍」的控制器調用方法「搜索」並將「柏拉圖」傳遞給搜索方法。所以我現在在哪裏有一個/遊樂場頁面。在課堂內部,我有一些我想應用於某些用戶輸入文本區域的「漸變」方法。所以我想通過$ _GET發送表單,然後調用不在「handle.php」中的「漸變」。我可以把它放在那裏,但那時控制器對我來說是無用的。 – NeoTubNinja 2009-10-17 18:34:29

1

你應該有一些方法來確定你正在調用哪個命令,所以控制器可以確定你需要去的地方。

例如,如果在一個窗體#和指揮通行,您的控制器可通過此關到控制器,用於特定的形式,那麼誰可以決定怎麼做你所需要的操作。

我認爲這是有風險的都這個邏輯在一個控制器,因爲這將意味着一個很長的switch語句,在某些時候。

你可能想解釋一下您是如何從控制器的JavaScript(客戶端)處理輸入,以確定路由,因爲,目前,這只是猜測就如何幫助你。

+0

現在我有控制器從/ page/action/query中的url中獲取它的命令。除了像4年前的html錨點之外,我還沒有使用過#,但這聽起來像個好主意。截至目前,我沒有一個處理javascript的控制器,這是我的問題。我使用Ajax調用來處理哪個可以具有邏輯,或者通過爲每個表單創建一個控制器來自動加載我需要的控制器(因爲我最終會有很多表單)。這兩者都沒有吸引我。如果我可以用#來傳遞它,太好了。 – NeoTubNinja 2009-10-17 18:16:33

+0

使用href是一個不錯的選擇,因爲您可以告訴控制器哪個窗體以及哪個命令。行動= 「Controller.php這樣/表格名稱/命令名」。然後你的控制器會得到需要的部分,或許可以用'/'分割URL,以確定發送請求的位置。 – 2009-10-17 18:23:08

1

你在說;

截至目前我沒有 控制器處理JavaScript這 是我的問題

據我瞭解你的控制器不需要控制器處理Ajax請求。您可以像正常請求那樣創建ajax請求。所以如果你的控制器知道如何處理正常的請求,它已經處理的JavaScript。

再次,如果我正確理解書籍的例子,你應該做這樣的事情;

$.get("/books/search/plato", function(data){ 
    alert("Data Loaded: " + data); 
}); 

而對於/操場和梯度的事情,這應該工作;你可以從handle.php調用它,它會請求遊樂場控制器並返回數據;

$.get("/playground/gradient", function(data){ //data is what is returned from playground file 
    alert("Data Loaded: " + data); 
}); 

希望這有助於