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

use*_*961 0 javascript php jquery json codeigniter

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

如果用户没有启用javascript:

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

如果用户确实启用了javascript:

  • 使用带有数据页面id的jquery post方法将文章发送到控制器中的delete功能
  • 删除控制器功能将在模型发送页面ID中运行删除功能以删除模型功能
  • 模型中的删除功能将从数据库中删除页面,当返回页面控制器删除功能时,它会为json对象创建一个消息数组,以返回到post请求的success函数.
  • 使用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
            }
        }
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

全局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');
});
Run Code Online (Sandbox Code Playgroud)

小智 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));
}
Run Code Online (Sandbox Code Playgroud)

因此,当用户启用了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');
Run Code Online (Sandbox Code Playgroud)

如果JS被禁用,请调用另一个函数.您应该使用AJAX专用控制器而不是同一类中的函数.