我的应用程序有两种不同的请求类型,AJAX和JSON。 AJAX应输出html代码; JSON应返回纯JSON代码。 我设法通过调用这样的控制器动作来发送JSON输出: /index.json - >输出 json代码,视图位于 /View/Test/json/index.ctp
下我如何设置将视图文件存储在 /View/Test/ajax/index.ctp 中以获取 /index.ajax
等请求我尝试过设置 Router :: parseExtensions('json','ajax'); 在我的/Config/routes.php中然后调用index.ajax只是输出了/View/Test/ajax/index.ctp的标准/View/Test/index.ctp insetad
我做错了什么?
亲切的问候,
Battlestr1k3
答案 0 :(得分:0)
Ajax是一种方法,而不是数据类型。
您可能正在发出一个返回json的ajax请求,在这种情况下,您可以在json视图中使用它或解码它并在标准视图中使用它。
如果要通过ajax请求重新调整json对象或数组以显示为HTML,则还可以使用jquery对其进行解析。有关更多信息,请参见此处:
http://api.jquery.com/jquery.parsejson/
编辑以下评论:
首先,您需要有一个视图文件来输出HTML,这将在:
应用程序/查看/测试/ index.ctp app / View / Tests / add.ctp
等
然后您的控制器中有相应的方法:
public function index(){
//index method here
}
此时,当您在浏览器中转到/tests/index.html时,您的索引视图将呈现,并且您将在index.ctp文件中设置的所有HTML结构都将显示。但是,您没有数据,因为您没有从数据库中检索它或将其设置为供您使用的视图。
所以,为了渲染它,你运行你的ajax调用并将url设置为/ Tests / index
然后将逻辑添加到控制器中的索引函数中,如:
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。