2013-06-23 38 views
0
CakePlugin::routes(); 
Router::setExtensions('json'); 
Router::parseExtensions('json'); 

routes.php但仍然當我調試我得到'html'的迴應。如何獲取請求處理程序響應類型='cakephp中的json?'

debug($this->RequestHandler->responseType()); 

請幫幫我。

這是錯誤顯示在控制檯--->

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>404 Not Found</title> 
</head><body> 
<h1>Not Found</h1> 
<p>The requested URL /cities/index.json was not found on this server.</p> 
</body></html> 
+0

那是哪裏調試statment?如果它在beforeFilter()中,因爲RequestHandler將響應類型設置爲在beforeFilter()之後運行的startup()回調中,所以預計將會使用「html」。還打開調試,以獲得實際的錯誤,而不是通用的404,也許一些錯誤是在RequestHandler :: startup()可以運行之前生成的。 – ADmad

回答

0

我有這個問題與XML

您的視圖文件夾中創建一個文件夾JSON(如查看/頁/ json),然後在那裏放置你的視圖文件(例如news.json)

然後你可以在控制器方法結束之前這樣做,強制響應爲json。

$this->RequestHandler->respondAs('json'); 
+0

那很漂亮1.x。在2.x中,您通常不再需要任何視圖文件,View類能夠自行輸出所需的結果。使用正確的方法,您不需要任何額外的配置或標頭設置。看到我上面的答案。 – mark

+0

我試過這種方式的RSS提要,但即使使用ParseExtensions我也無法得到它返回正確的響應類型,除非我明確地設置它,是否有任何具體的陷阱呢?我有興趣讓它更高效地工作! – Voycey

0

當使用json/xml/csv等時,最簡潔的方法是實際使用擴展來訪問操作。 含義:

/controller/action 

應該404,如果你不想提供這個動作的HTML版本。

而且你的方法應該是這樣來訪問:

/controller/action.xml 
/controller/action.json 

這樣一來,它不僅清楚什麼誰也無法預料,也調用所有的蛋糕魔法,讓RequestHandler設置XML或JSON視圖類,與適當的標題等響應。 您也可以以這種方式支持多種不同的格式,而無需額外的開銷。

此外,您還可以輕鬆地設置查詢字符串:

/controller/action.json?foo=bar 

不打框架:)

相關問題