对php请求的post-jquery请求使用一个delete函数


Using one delete function for a post jquery request of php request

我想知道如何完成下一项任务。我有一个控制器,它加载一个带有表的视图,该表列出了数据库中的页面。在表中的每一行中,都有一个图标的位置,当单击该图标时,它将执行以下两种操作之一。

如果用户没有启用javascript:

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

如果用户确实启用了javascript:

  • 使用jquery post向控制器中的删除功能发送帖子具有数据页id的方法
  • 删除控制器功能将在模型发送页面id中运行删除功能以删除模型功能
  • 模型中的Delete函数将从数据库中删除页面,当返回到页面控制器Delete函数时,它会为json对象创建一个消息数组,以返回到post请求的成功函数
  • 使用我的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');
});

我认为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)就"显示消息"而言,如果存在"消息",则视图本身可以为"消息"做好准备。让我们回到

2) 你能让删除功能返回你想要显示的信息吗?你的AJAX方法将忽略此消息,而你的视图将显示它…

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

如果js=1
 nbsp;标头('HTTP/1.1200')
其他
 nbsp;调用视图并在"消息"中包含/传递