【问题标题】:Zend Ajax can't deleteZend Ajax 无法删除
【发布时间】:2012-07-20 02:34:17
【问题描述】:

我有一个名为state 的表,其中包含state_idstate_name 列。目前我可以添加新状态并编辑它们,但我不能删除状态。我的代码可能有什么问题?

{title:"Actions",template:'<a class="left" onclick="javascript:openEditStatePopup(this);">Edit</a>' + 
    '<a class="right" onclick="javascript:deleteState(this);">Delete</a>'
    ,width:120,sortable:false}

这个sn-p是视图代码,当我点击链接时,它会执行以下JavaScript:

function deleteState(element)
{
    var countryDetail = {};
    var GriddataItem = $("#state_grid").data("kendoGrid").dataItem($(element).closest("tr"));
    countryDetail.state_id =GriddataItem.state_id;
    countryDetail.state_name = GriddataItem.state_name;
    // alert(countryDetail.state_id);
    $.ajax({
        url:"<?= $this->baseUrl('admin/state/delete')?>",
        data: {state_id :  countryDetail.state_id},
        dataType: "json",
        type: "POST",
        success: function(){
            alert('success');
        },
        failure:function(){
            alert('not working');
        }
    });
}

当我在$.ajax 调用之前回显alert(countryDetail.state_id) 时,我可以获得正确的状态ID。

我的删除控制器是:

public function deleteAction()
{

    $state = $this->_request->_getPost('state_id');
    $stateMapper = new Application_Model_Mapper_StateMapper();
    $stateMapper->delete($state);
}

而要删除的模型映射器是:

public function delete(Application_Model_State $state)
{
    $data = $state->toArray();
    $adapter = $this->getDbTable()->getAdapter()->delete(array('state_id=?'=>$data['state_id']));
}

【问题讨论】:

    标签: php javascript jquery ajax zend-framework


    【解决方案1】:

    你好,你需要写deleteAction如下

    public function deleteAction()
    {
    
    
        $state = $this->_getParam('state_id');
        $stateMapper = new Application_Model_Mapper_StateMapper();
        $stateId = $stateMapper->delete($state);
        $this->_helper->json(array('success'=>1));
    } 
    

    【讨论】:

    • @zlipper 根据您的问题,上述代码中的内容与我在答案中提到的相同。 $this-&gt;_helper-&gt;json(array('success'=&gt;1)); 与删除无关。它表明我不需要为你的问题浪费那么多时间。 @lordkelvin 你能解释一下如何使用$this-&gt;_helper-&gt;json(array('success'=&gt;1));删除记录
    【解决方案2】:

    在您的控制器操作deleteAction() 中,您将获得 POST 参数 'state_id'

    $state = $this->_request->_getPost('state_id');
    $stateMapper = new Application_Model_Mapper_StateMapper();
    $stateMapper->delete($state);
    

    并且您在 $stateMapper-&gt;delete($state); 函数中传递了 $state

    在您的模型类函数public function delete(Application_Model_State $state) 定义中,您传递的不是状态模型对象和状态ID,因此您应该将其更改为

    public function delete($state_id)
    {
        $adapter = $this->getDbTable()->getAdapter()->delete(array('state_id=?'=>$state_id));
    
    }
    

    那么它应该可以工作......

    另一件我没见过的东西

    failure:function(){
          alert('not working');
    }
    

    其实是

    error:function(){
        alert('not working');
    }
    

    【讨论】:

    • 嗨,我试过你的解决方案不工作...是我正确定义 $.ajax..?
    • @zlippr 我改了答案,再检查一下
    • 是的,我已经将失败更改为错误..当我尝试您的解决方案时,错误功能正在执行...您是否需要有关脚本的更多信息..?
    • 使用 firbug 扩展并检查 ajax 是否能够访问该 url,更改 url:"&lt;?= $this-&gt;baseUrl('admin/state/delete')?&gt;" 并尝试手动调试,然后重试
    • 用firebug检查.. url被执行并且数据被正确传递..但我仍然没有工作消息..你认为json期望任何回报..?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多