Zend Framework: как вызвать функцию (не действие контроллера), используя ajax? - PullRequest
0 голосов
/ 28 июля 2011

Предположим, что у меня есть открытая функция в 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 ]

1 голос
/ 29 июля 2011

Я бы предложил написать для него действие. Если внутри test() есть логика, которую вам нужно использовать, чтобы использовать другие действия, то не учитывайте.

Есть несколько причин, по которым это должно быть собственным действием:

  • Вы можете проверить результаты действия напрямую, вместо того, чтобы проходить через прокси.
  • Вы можете воспользоваться переключением контекста в зависимости от того, хотите ли вы вернуть JSON или HTML
  • Это - это действие, которое вы пытаетесь совершить через AJAX, поэтому нет необходимости его скрывать.

Помните, что не каждое действие должно быть собственной полноценной страницей. Единственное, что вы должны сделать, это отключить автоматическую визуализацию представления внутри этого действия, чтобы оно не жаловалось на невозможность его найти.

1 голос
/ 28 июля 2011
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;
    }
}

просто подумай об этом;)

...