CakePHP - ajax-requests的布局文件夹

时间:2015-02-08 12:16:33

标签: php ajax json cakephp

我的应用程序有两种不同的请求类型,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

1 个答案:

答案 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。