我正在寻找如何完成下一个任务。我有一个 Controller ,它加载一个 View ,其中包含一个列出数据库中页面的表。在表格中的每一行中都有一个图标,单击该图标将执行以下两项操作之一。
如果用户没有启用 JavaScript:
- 点击图标将重定向到 Controller 中的删除功能,并以页面 id 作为参数
- 删除 Controller 功能将在模型中运行删除功能,发送页面 ID 来删除模型功能
- 模型中的删除函数将从数据库中删除页面,当返回到页面 Controller 删除函数时,它将重定向回索引函数以再次显示页面列表表。
- 重定向后,它将显示标题和成功/失败消息。
如果用户确实启用了 JavaScript:
- 使用 jquery post 将帖子发送到 Controller 中的删除功能 带有数据页id的方法
- 删除 Controller 功能将在模型中运行删除功能,发送页面 ID 来删除模型功能
- 模型中的删除函数将从数据库中删除页面,当返回到页面 Controller 删除函数时,它会为 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 时,您可以在 $.post 函数中传递一个参数来调用 deleteAjax,让 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 专用 Controller 而不是同一类中的函数。
关于php - 对php请求的post jquery请求使用一个删除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18539108/