2013-05-09 95 views
1

已更新:现在可以运行100%。AJAX + Codeigniter实时页面加载功能

这些代码段允许用户点击视图上的删除按钮,该按钮向我的控制器发送AJAX请求以与数据库交互(删除记录)。然后反馈回调函数中发生的结果,以更新当前视图(没有页面加载)记录被删除并隐藏该元素。

查看:

<?php 
// Output the records 
if($result) 
{ 
    foreach ($result as $rows => $row) 
    { 
     echo "<tr id=\"row" . $row['id'] . "\">"; 
      echo "<td>" . $row['id'] . " - " . $row['name'] . "</td>"; 
      echo "<td>" . $row['logo_path'] . "</td>"; 
      echo "<td>" . $row['date_created'] . "</td>"; 
      echo "<td>" . "<a href=\"#\" id=\"" . $row['id'] . "\" class=\"delete\">Delete</a><br>" . "</td>"; 
     echo "</tr>"; 
    } 

} else { 
    echo "There are no platforms to show"; 
} 
?> 

<script type="text/javascript"> 
$("a.delete").click(function(e) 
{ 
    e.preventDefault(); 
    var platform_id = $(this).attr('data-id'); 
    var row = $(this).attr('id'); 

    $.ajax({ 
     type: "POST", 
     url: "platform/delete", 
     dataType: "json", 
     data: 'platform_id='+platform_id, 
     success: function(result){ 
      if (result.success == 1) 
      { 
       $("#row" + row).fadeOut(); 
       //document.getElementById(row).style.display = 'none' 
      } 
     }, 
     error: function(result){ 
      alert(result.message); 
     } 
    }); 
}); 
</script> 

控制器:

function delete() 
{ 
    $result=array(); 

    $this->load->model('platform_model'); 
    $platform_id = $this->input->post('platform_id'); 

    if($this->platform_model->delete($platform_id)) 
    { 
     $result['success']= 1; 
     $result['platform_id']= $platform_id; 
     $result['message']= "Success"; 
    } else { 
     $result['success']= 0; 
     $result['message']= "Error"; 
    } 

    die(json_encode($result)); 

} 

型号:

function delete($platform_id) 
{ 
    $this->db->where('id =', $platform_id); 

    if ($this->db->delete('platforms')) 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 
+0

我已经更新了我的问题,以更具体地解决手头的问题。我不赞赏@omar和其他人关闭我的问题,而没有给予提炼的机会。 – evade 2013-05-10 15:58:50

+1

关闭不确定,如果根据需要进行改进,问题会以非常快的速度重新打开。 – 2013-05-10 16:13:57

+0

非常好,我不明白downvoting那么,它应该是一个国旗或其他东西 - 但我想我不得不看看事情如何处理在这里。任何问题现在都更有针对性。 – evade 2013-05-10 18:29:00

回答

1

更新

你不需要任何形式的代码做这个工作。在您更新的问题中,您缺少定义id变量的位置。没有它,你将无法删除记录。

如果HTTP POST请求是提交它的表单,则会通过HTTP POST请求发送数据。使用AJAX代码数据也会以POST数据的形式发送,由Codeigniter在您的AJAX模型方法中使用$this->input->post()数组处理。调试这个过程中一个伟大的工具是Firebug的wher你可以看到数据公布之前,我使用的属性data-id而不是id属性,因为后者必须是唯一的东西被返回(净利润/ XHR选项卡)

在我的例子。我自己更喜欢这个解决方案,但可以使用除id之外的任何属性名称(如果属性值重复)。

$('a.delete').click(function(e) 
{ 
    e.preventDefault(); 
    var id = $(this).attr('data-id'); 
    // your ajax call 

匹配的HTML作为锚,但可能是一个按钮或任何其他元素:

<a href="#" data-id="<?php echo $row['id']; ?>" class="delete">Delete</a> 

Ajax代码从删除链接的点击触发的,因此没有必要进行任何形式的。

+0

感谢您的回复,我已将问题更新为更具体。我能够得到ajax函数工作得益于你的帮助,主要是e.preventDefault();.做一些关于这个问题的研究,我无法找到任何反映我最新更新问题的内容。 – evade 2013-05-10 18:31:45

+0

查看我的更新。你不需要任何形式。 – jtheman 2013-05-10 21:43:13

+0

我正在尽我所能去弄清楚这一点。我在警报中投掷,看看代码在哪里被绊倒。我安装了Fiddler2来提供帮助。我遇到了“遇到错误”您请求的操作不被允许。“ POST/league/platform/delete HTTP/1.1 id = 1(500错误) - 我在本地运行XAMPP,idk如果这意味着存在服务器配置错误。我怀疑它,因为即时通讯新的ajax – evade 2013-05-10 21:55:34