我想知道如何完成下一项任务。我有一个控制器,它加载一个带有表的视图,该表列出了数据库中的页面。在表中的每一行中,都有一个图标的位置,当单击该图标时,它将执行以下两种操作之一。
如果用户没有启用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;调用视图并在"消息"中包含/传递