Ошибка вызова Ajax в Zend Controller - PullRequest
0 голосов
/ 12 июня 2011

Мой Zend контроллер выглядит так:

 public function deleteAction()
    {
        $this->_helper->layout->disableLayout();
         $id = (int)$this->_request->getPost('id');
        $costs = new Application_Model_DbTable_Costs();
        if($costs->deleteCosts($id)){
            $this->view->success = "deleted";
        }

    }

И вызов ajax, который я использую для отправки данных:

 $.ajax({
             dataType: 'json',
            url: 'index/delete',
            type: 'POST',
            data:id,
            success: function () {
             alert("success");
            },

            timeout: 13*60*1000,
            error: function(){
               console.log("Error");
            }

        });

И в моем delete.phtml код выглядит так:

<?php 
    if($this->delete === true): 
        echo 'true';
    else:
        echo 'Sorry! we couldn\'t remove the source. Please try again.';
    endif;
?>

Ответ возвращает HTML.

Это мой первый проект с Zend Framework. Заранее спасибо.

1 Ответ

4 голосов
/ 13 июня 2011

Действие вашего контроллера возвращает HTML, а не JSON.

Вам следует рассмотреть возможность использования AjaxContext action helper

public function init()
{
    $this->_helper->ajaxContext->addActionContext('delete', 'json')
                               ->initContext();
}

public function deleteAction()
{
    $id = (int)$this->_request->getPost('id');
    $costs = new Application_Model_DbTable_Costs();
    try {
        $costs->deleteCosts($id));
        $this->view->success = "deleted";
    } catch (Exception $ex) {
        $this->view->error = $ex->getMessage();
    }    
}

Единственное, что вам нужно сделать, это указать в запросе AJAX параметр format, равный json, например

$.post('index/delete', { "id": id, "format": "json" }, function(data) {
    if (data.error) alert("Error: " + data.error);
    if (data.success) alert("Success: " + data.success);
}, "json");

Возможно, вы захотите обработать ответ иначе, но это должно дать вам представление.

...