2015-02-08 129 views
0

我將爲我的應用程序AJAX和JSON提供兩種不同的請求類型。 AJAX應輸出html代碼; JSON將返回純JSON代碼。 我設法通過調用控制器動作像這樣送JSON輸出:/index.json - >輸出JSON代碼,鑑於位於下/View/Test/json/index.ctpCakePHP - Ajax請求的佈局文件夾

怎麼辦我管理的視圖文件/View/Test/ajax/index.ctp存儲/index.ajax

我已嘗試設置 路由器:: parseExtensions( 'JSON',要求「AJAX 「); 我/Config/routes.php但隨後callling index.ajax只是outputed /View/Test/ajax/index.ctp

標準/View/Test/index.ctp insetad我在做什麼錯?

隨着親切的問候,

Battlestr1k3

回答

0

Ajax是一種方法,而不是一個數據類型。

您可能正在發出一個ajax請求,它將返回json,在這種情況下,您可以在json視圖中使用它,或將其解碼並在標準視圖中使用它。

如果您通過您的ajax請求重新調用json對象或數組以顯示爲HTML,您還可以使用jquery解析它。在這裏看到更多的信息:

http://api.jquery.com/jquery.parsejson/

編輯評論如下:

首先,你需要有一個視圖文件輸出HTML,這將是:

應用程序/查看/測試/ index.ctp 應用程序/查看/測試/ add.ctp

然後,您有一個對應在你的控制器荷蘭國際集團方法:

public function index(){ 
    //index method here 
} 

此時當你在瀏覽器中/tests/index.html你的索引視圖將呈現,所有的HTML結構你在index.ctp文件中設置將正在顯示。但是,如果您尚未從數據庫中檢索數據,或者將其設置爲供您的視圖使用,則不會有數據。

所以,以使其運行您的AJAX調用和設置的URL爲/測試/索引

然後將邏輯添加到您的索引功能,在你的控制器是這樣的:

if($this->RequestHandler->isAjax()){ 
    //debug can cause problems with AJAX requests so switch it off if it is on 
    Configure::write('debug', 0); 

//you need to pass the id through in the data parameter of your ajax call 
$id = $this->request->query['id']; 

    $settings = array(
    'conditions' => array('Test.id' => $id), 
); 
    $data = $this->Test->find('first', $settings); 

    return json_encode($data); 
} 

這將返回一個json數組,您可以使用jquery解析並追加到您的HTML中。

+0

謝謝你的快速反應。我已經想過在Javascript中解析JSON,但是使用HTML表格和許多不同的標籤,爲它編寫JSON解析器需要非常多的時間。我只想使用兩個文件夾,一個用於JSON請求(已經工作),一個用於HTML-AJAX請求。我可以用什麼來代替ajax,html顯然不起作用。 – Battlestr1k3 2015-02-09 12:23:39

+0

我可以澄清一下,你在做AJAX請求來獲取你的數據嗎?例如,您是否嘗試更新視圖而無需用戶重新加載頁面?如果是這樣,你將別無選擇,只能使用並因此解析JSON aray - 這就是AJAX如何返回變量。如果您沒有使用AJAX獲取數據,那麼您只需在控制器中設置變量並使用標準的Cake視圖。您提到了文件夾,在這種情況下,它將是/view/test/json/index.json和/view/test/index.ctp用於PHP/HTML視圖文件。 – 2015-02-09 15:28:33

+0

準確!我目前通過調用index.json輸出html,這是不正確的,因爲它沒有返回json。所以最好的做法是(對於由ajax加載的html)來加載默認目錄中的視圖,如/View/Test/ajax_tabledata.ctp?我可以設置一些類似於普通路由的東西,假設使用.ajax-externsion的所有請求應該從/View/Test/ajax/action.ctp接收輸出?我想在AppController.php中調用beforeRender()的方法 – Battlestr1k3 2015-02-09 16:24:42