Php 使用codeigniter的jQuery post调用失败

Php 使用codeigniter的jQuery post调用失败,php,jquery,codeigniter,Php,Jquery,Codeigniter,我正在尝试使用post jquery请求删除元素: $(function(){ //The element // <a data-id="39" data-toggle="modal" href="#delete"><i class="icon-trash"></i> Delete</a> $('.delete').on('click',function(){ var id= $(this).attr('d

我正在尝试使用post jquery请求删除元素:

$(function(){
    //The element
   // <a data-id="39" data-toggle="modal" href="#delete"><i class="icon-trash"></i> 

Delete</a>


   $('.delete').on('click',function(){
       var id= $(this).attr('data-id');


  $.post('task/delete',  { id: id }, function(data) {
        alert('Task deleted!');
    })
    .success(function(){  alert('Task deleted!'); })          
     .complete(function(){  alert('Task completed!'); })
     .error(function(){   alert('Error was found!'); });
   })

});
这个模型很简单。。它只是删除记录

    public function deleteTask($task_id)
    {
        $task_id = mysql_real_escape_string($task_id);
        $this->db->query("DELETE FROM tasks WHERE task_id = ?", array($task_id));

    }
我收到两条消息…一条是错误,一条是删除。。。
我想避免的另一件事是有人将id发布到控制器任务。。它会自动逐个删除记录,有没有办法避免这种情况?

您没有在控制器中使用函数名,它应该是:

$this->task_delete->deleteTask($id);

您没有在控制器中使用函数名,它应该是:

$this->task_delete->deleteTask($id);

为了避免有人发布所有ID并删除所有任务,您应该只删除属于此用户的任务

我猜您保存每个任务是为了让它属于特定的用户,对吗?因此,在delete查询中,可以使其运行delete,其中task_id={task_id}和user_id={user_id}。用户id是您将在会话中保存的内容

作为补充说明,在运行数据库查询时,可以绑定参数,这意味着CI会确保参数的安全。因此,您可以将上面的查询修改为:

$this->db->query("DELETE FROM tasks WHERE task_id = ?", array($task_id));
您可以在这里阅读更多信息:在底部(查询绑定部分)

至于您同时获得错误和成功消息的错误,可能会出现一些不同的错误。我不确定复制代码时是否出错,但PHP代码中有一个错误:

$this->load->model('tasks_model','task_delete');
$this->task_delete($id);
应该是:

$id = $this->input->post('id'); // the data is posted, it won't be passed in as an argument to the controller function
$this->load->model('tasks_model','task_delete');
$this->task_delete->deleteTask($id);

而且您的查询似乎也有错误,所以最好按照我上面提到的那样执行。

为了避免有人发布所有ID并删除所有任务,您应该只删除属于此用户的任务

我猜您保存每个任务是为了让它属于特定的用户,对吗?因此,在delete查询中,可以使其运行delete,其中task_id={task_id}和user_id={user_id}。用户id是您将在会话中保存的内容

作为补充说明,在运行数据库查询时,可以绑定参数,这意味着CI会确保参数的安全。因此,您可以将上面的查询修改为:

$this->db->query("DELETE FROM tasks WHERE task_id = ?", array($task_id));
您可以在这里阅读更多信息:在底部(查询绑定部分)

至于您同时获得错误和成功消息的错误,可能会出现一些不同的错误。我不确定复制代码时是否出错,但PHP代码中有一个错误:

$this->load->model('tasks_model','task_delete');
$this->task_delete($id);
应该是:

$id = $this->input->post('id'); // the data is posted, it won't be passed in as an argument to the controller function
$this->load->model('tasks_model','task_delete');
$this->task_delete->deleteTask($id);

而且您的查询似乎也有错误,所以最好像我上面提到的那样进行查询。

您的控制器方法应该是这样的

public function delete()
{
   // Do user validation here
  $this->load->model('tasks_model');
  $this->tasks_model->task_delete($this->input->post('id'));
  return "task deleted";
}
public function task_delete($task_id)
{
  $this->db->where('task_id', $task_id);
  $this->db->delete('tasks');
}
你是这样做的吗

public function delete()
{
   // Do user validation here
  $this->load->model('tasks_model');
  $this->tasks_model->task_delete($this->input->post('id'));
  return "task deleted";
}
public function task_delete($task_id)
{
  $this->db->where('task_id', $task_id);
  $this->db->delete('tasks');
}
正如我建议的那样,在评论中指出应该验证用户,并在可以增加到不同数据库的可移植性的地方使用CI的活动记录库

编辑

显示PHP错误(如果打开,可能还会显示MySQL错误)

要确保删除任务,请执行此操作(效率较低)


然后在控制器中处理返回的布尔值。

您的控制器方法应该如下所示

public function delete()
{
   // Do user validation here
  $this->load->model('tasks_model');
  $this->tasks_model->task_delete($this->input->post('id'));
  return "task deleted";
}
public function task_delete($task_id)
{
  $this->db->where('task_id', $task_id);
  $this->db->delete('tasks');
}
你是这样做的吗

public function delete()
{
   // Do user validation here
  $this->load->model('tasks_model');
  $this->tasks_model->task_delete($this->input->post('id'));
  return "task deleted";
}
public function task_delete($task_id)
{
  $this->db->where('task_id', $task_id);
  $this->db->delete('tasks');
}
正如我建议的那样,在评论中指出应该验证用户,并在可以增加到不同数据库的可移植性的地方使用CI的活动记录库

编辑

显示PHP错误(如果打开,可能还会显示MySQL错误)

要确保删除任务,请执行此操作(效率较低)


然后在控制器中处理返回的布尔值。

它给我404..当我发送请求时…通过chromeuse$.post('task/delete')没关系,我把完整的url。。它返回200..但chrome变为空白..它会显示一条消息,说明页面出现了问题…通常您可以避免使用$.post('task/delete'),您可以只放置$.post('/task/delete')(注意开始处的/)。只要您不想在子目录()中运行网站,/在开始时就可以运行。使用echo而不是return,因为ajax请求通过echo获得响应,我注意到的另一件事是,您的删除查询有语法错误,您没有将id放入clauseit给我的位置404..当我发送请求时…通过chromeuse$.post('task/delete')没关系,我放了完整的url。.它返回200。.但chrome变为空白。.它显示一条消息,说页面出了问题…通常你可以避免使用$.post('task/delete'),你可以只放$.post('/task/delete')(注意开始处的/)。只要您不尝试在子目录()中运行网站,开始时的/将起作用.使用echo而不是return,因为ajax请求通过echo获得响应,我注意到的另一件事是,您的删除查询有语法错误,您没有将id放入clauselol的位置..我进行了更正..它等待了几秒钟..然后chrome崩溃..我如何调试它?这很奇怪。我无法想象它为什么会使浏览器崩溃。如根据上面沙岩的建议,您应该将return“task deleted”改为echo“task deleted”我知道这可能不会有多大帮助,但也许可以在另一个浏览器中试用?哈哈…我做了更正..它等了几秒钟..然后chrome崩溃..我该如何调试这很奇怪。我无法想象它为什么会使浏览器崩溃。正如上面Shayan所建议的,你应该将return“task deleted”改为echo“task deleted”;我知道这可能不会有多大帮助,但也许可以在另一个浏览器中尝试?我按照你说的做了。我如何显示sql错误?。当有ajax请求时。我如何知道sql执行是否成功?!要监视ajax请求,可以右击页面上的任意位置,选择“Inspect元素”菜单项,并在打开的新窗口中选择“网络”。在那里,您将能够准确地看到您在AJAX调用中发送的内容和返回的内容。(如果进行了大量调用,您可以选择底部的“XHR”以