好了,笨是一個PHP框架 - 這意味着它的服務器端。 (我知道,那裏有一個ajax庫,但我沒有使用它)。我們必須瞭解服務器端和客戶端之間的區別。您的JavaScript是客戶端。我通常在沒有javascript的情況下開發codeigniter中的所有內容,然後返回並添加javascript位。這有助於我確保該系統適用於那些沒有啓用JavaScript的系統,或者出於任何原因無法執行javascript。 (順便說一句,這叫做progressive enhancement)。
因此,首先,讓我們的非JavaScript版本的護理: 你只需要給你的紅/綠色按鈕鏈接點擊後指向控制方法將更新數據庫記錄,您重定向回您之前所在的頁面(具有紅色/綠色按鈕)。
/controller/method.html是我們的控制器方法,將保存到數據庫,並重定向回此頁面。 - >
<a href="/controller/method.html" class="red my-button">Check</a>
現在,讓我們的js版護理:
在你看來
,你只需要劫持的點擊,發送Ajax請求,並改變基於紅色/綠色按鈕控制器方法的結果。所以,我們所做的是保持鏈接不將頁面重定向到href屬性(e.prevendDefault())。然後,我們得到href的值,並對該控制器方法進行ajax調用。該方法將確定這是否是ajax請求並保存到數據庫,然後回顯「成功」消息。在success
上,我們可以更新客戶端的可視化組件。
$('.my-button').live('click', function(e) {
e.preventDefault();
$.ajax({
// $(this).attr('href') gets the value of the links href attribute
// which is "/controller/method.html" in this case
url: $(this).attr('href'),
success: function(data) {
// update your button with whatever html to write the new button
$('.my-button').replaceWith('<a href="/controller/method.html" class="red my-button">Check</a>');
}
});
});
您的控制器方法只是檢查它是否是ajax請求。如果是這樣,只要返回成功,如果不重定向頁面。
function my_controller_method()
{
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest") {
// update your database
echo "success";
}else{
// redirect back to page
redirect($_SERVER[‘HTTP_REFERER’]);
}
}
真棒演示!感謝您的時間和精力。我會仔細研究這些代碼的功能。一旦我將頭部纏繞在上面,我會重新發回任何其他內容,以幫助他人快速提高速度。 – UMGuy 2011-12-20 13:07:58