如何使用RequestHandler接受来自ajax的数据?

时间:2011-07-02 09:29:02

标签: ajax cakephp

我尝试将数据从ajax发送到cakephp cotroller

function loadtooltip(obj, $user_id) {
 //AJAX
 var req = Inint_AJAX();
 req.onreadystatechange = function () { 
      if (req.readyState==4) {
           if (req.status==200) {
                displaytooltip(obj, req.responseText);
           } 
      } 
 };

 req.open("POST", "http://127.0.0.1/cakeplate/tooltips/tooltip/", true); 
 req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 req.send($user_id); 

};

这个控制器

<?php
Class TooltipsController extends AppController{
var $name = 'Tooltips';
var $uses = array('Reply','User');
var $component = array('RequestHandler','Javascript','Ajax');
var $layout =  'tooltip';


function tooltip($user_id=NULL){

                if(!empty($user_id)){
                    $tooltip = $this->Reply->User->findById($user_id);
                    $this->set('tooltip',$tooltip);
                }

}
}
 ?>

我需要有人帮我修改代码

1 个答案:

答案 0 :(得分:1)

你在控制器中执行的方式,你将无法获得user_id,因为它是通过http的GET方法传递的var。

如果您为此网址发出GET请求,则可以访问此变量: http://example.com/cakeplate/tooltips/tooltip/1 其中1将是您的$ user_id。

如果您将请求作为POST发送,则可以访问此var $ this-&gt;数据中的值 这样,您就可以根据传递给控制器​​的var处理请求。

你将面临的另一个问题是这个控制器需要渲染一个视图,所以我建议你看一下http://book.cakephp.org/view/1238/REST,在那里你可以看到如何创建一个让控制器解析的路由另一个视图,它是一个不同的自定义布局,如json(我在这种情况下建议的那个),然后你可以在这个视图中只显示json值。

最后,但也很重要,我建议您使用jQuery来执行javascript部分,我认为它会更容易,您可以在http://api.jquery.com/jQuery.get

查看它