使用一个删除函数为php请求的post jquery请求

时间:2013-08-30 18:15:10

标签: php javascript jquery json codeigniter

我正在寻找如何完成下一个任务。我有一个控制器,用一个表列出我的数据库中的页面加载视图。在表格中的每一行中都有一个图标点,点击后会执行以下两种操作之一。

如果用户未启用javascript:

  • 点击图标将重定向到控制器中的删除功能,页面ID为参数
  • 删除控制器功能将在模型发送页面ID中运行删除功能以删除模型功能
  • 模型中的删除功能将从数据库中删除页面,当返回页面控制器删除功能时,它将重定向回索引功能,再次显示页面列表。
  • 重定向后,将显示标题和成功/失败的消息。

如果用户确实启用了javascript:

  • 使用jquery帖子向控制器中的删除功能发送帖子 数据页面标识为
  • 的方法
  • 删除控制器功能将在模型发送页面ID中运行删除功能以删除模型功能
  • 模型中的删除功能将从数据库中删除页面,当返回页面控制器删除功能时,它会为json对象创建一个消息数组,以返回到post请求的成功函数。
  • 使用my pnotify插件的消息将创建一条由该json对象组成的消息并将其显示给用户

我想知道的是如何正确适应这两种情况?我已经开始尝试这个了,但是如果我到目前为止犯了一个错误,我想澄清一下。

<?php
// Controller delete function
public function delete($content_page_id)
{
    if (isset($content_page_id) && is_numeric($content_page_id))
    {
        $content_page_data = $this->content_page->get($content_page_id);
        if (!empty($content_page_data))
        {
            //update is ran instead of delete to accompodate 
            //for the soft delete functionality
            $this->content_page->update('status_id', 3);
            if ($this->input->is_ajax_request())
            {
               //return json data array
            }
        }
    }
}
?>

用于具有删除按钮的多个表的全局JS文件

/* Delete Item */
$('.delete').click(function(event) { 
    event.preventDefault();
    var item_id = $(this).attr('rel');
    $.post(<?php echo current_url(); ?>'delete', { item_id : item_id }, function(data)  
    {
        if (data.success)
        {
            var anSelected = fnGetSelected( oTable );
            oTable.fnDeleteRow( anSelected[0] );
        }
    }, 'json');
});

2 个答案:

答案 0 :(得分:5)

我认为你应该在PHP中有两个函数:

public function delete($content_page_id) {
  // Your delete code

  return "a string without format";
}

public function deleteAjax($content_page_id) {
  return json_encode($this->delete($content_page_id));
}

因此,当用户启用JS时,您调用deleteAjax在$ .post函数中传递一个参数,让PHP知道JS已启用:

$.post(<?php echo current_url(); ?>'delete', { item_id : item_id, js: 1 }, function(data)  
{
    if (data.success)
    {
        var anSelected = fnGetSelected( oTable );
        oTable.fnDeleteRow( anSelected[0] );
    }
}, 'json');

如果禁用JS,请调用其他函数。您应该使用AJAX专用控制器而不是同一类中的函数。

答案 1 :(得分:0)

1)就“显示消息”而言 - 视图本身可以为“消息”(如果存在)做好准备。让我们回到......

2)你有删除功能可以返回你想要显示的信息吗?当您的View将显示它时,您的AJAX方法将忽略此消息...

3)我同意你的'控制器删除功能'应该根据请求是否是AJAX“完成”不同的结果。我喜欢@Skaparate(8月30日18:37回答)添加:js:1在你的删除功能中,你可以在一个简单的条件中使用它:

  

如果js = 1
  标题('HTTP / 1.1 200');
  否则
  调用视图并包含/传入“消息”