0

假设我在 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>
4

2 回答 2

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;
    }
}

想想这种方式;)

于 2011-07-28T09:46:39.370 回答
1

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

让它成为自己的行动有几个原因:

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

请记住,并非每个操作都必须是其自己的完整页面。确保你做的一件事是在这个动作中禁用视图的自动渲染,这样它就不会抱怨找不到它。

于 2011-07-29T16:20:31.523 回答