Zend Framework:如何使用ajax调用函数(而不是控制器动作)?

时间:2011-07-28 09:14:49

标签: ajax zend-framework function call controller-action

假设我在IndexController中有一个名为test()的公共函数:

public function test(){
    //some code here
}

在index.phtml视图文件中,我想使用JQUERY AJAX来调用test()函数但不知道这个。

代码:

<a href="javascript:void(0)" onclick="callTestFunction()">Click me to call test() function()</a>
<script>
callTestFunction = function(){
    $.ajax({
        type: "POST",
        Url: ***//WHAT SHOULD BE HERE***
        Success: function(result){
            alert('Success');
        }
    });
}
</script>

2 个答案:

答案 0 :(得分:1)

public function ajaxproxyAction(){
    if (is_callable($_REQUEST['function_name'])) {
        return call_user_func_array($_REQUEST['function_name'], $_REQUEST['function_params'])
    }
}


<script>
callTestFunction = function(){
    $.ajax({
        type: "POST",
        Url: '/controller/ajaxproxy/',
        data: { function_name: 'echo', function_params: 'test' }
        Success: function(result){
            alert('Success');
        }
    });
}
</script>


public function ajaxproxy2Action(){
    if (method_exists($this, $_REQUEST['function_name'])) {
        $retval = call_user_func_array(array($this, $_REQUEST['function_name']), $_REQUEST['function_params']);
        echo json_encode(array('function_name' => $_REQUEST['function_name'], 'retval' => $retval));
        die;
    }
}

想一想这种方式;)

答案 1 :(得分:1)

我建议为它写一个动作。如果test()内部存在逻辑,您需要其他操作才能使用,那就是因素。

将其作为自己的行动有几个原因:

  • 您可以直接测试操作的结果,而不必通过代理。
  • 您可以利用上下文切换,具体取决于您是否需要返回JSON或HTML
  • 是您尝试通过AJAX点击的动作,因此无需隐藏它。

请记住,并非每个动作都必须是自己的完整页面。确保您做的一件事是禁用此操作中的视图的自动呈现,因此它不会抱怨无法找到它。