2013-05-09 150 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