【发布时间】:2018-01-16 22:26:57
【问题描述】:
我正在使用 CodeIgniter 3 和 Twitter Bootstrap 开发一个注册和登录应用程序。
我有一个“users” MySQL 表和一个相应的“users.php”视图,它以 HTML 格式呈现“users”表,如下图所示:
引导表中的“操作”列的每一行都有一个“启用”或“禁用”按钮,具体取决于用户的状态。这部分视图的代码是:
// Status column
<td>
<?php if ($user->active == 1) {
echo '<span class="text-success">' . 'Enabled' . '</span>';
} else {
echo '<span class="text-danger">' . 'Disabled' . '</span>';
}
?>
</td>
// Enable/Disable buttons
<?php if ($user->active == 1) { ?>
<a href="<?php echo base_url(); ?>users/deactivate/<?php echo $user->id ?>" title="Deactivate" class="btn btn-success btn-xs state-change" data-role="deactivate" data-id="<?php echo $user->id ?>"><span class="glyphicon glyphicon-ban-circle"></span> Disable</a>
<?php } else { ?>
<a href="<?php echo base_url(); ?>users/activate/<?php echo $user->id ?>" title="Activate" class="btn btn-success btn-xs state-change" data-role="activate" data-id="<?php echo $user->id ?>"><span class="glyphicon glyphicon-ok"></span> Enable</a>
<?php } ?>
我通过 AJAX 在不刷新页面的情况下激活/停用用户:
$('.state-change').on('click', function(evt) {
evt.preventDefault();
var id = $(this).data('id');
var role = $(this).data('role');
if (role == "activate") {
var stateUrl = 'users/activate/';
} else {
var stateUrl = 'users/deactivate/';
}
$.ajax({
url: stateUrl + id,
method: 'GET',
dataType: 'php',
success: function(){
console.log(id);
console.log(role);
}
});
});
问题是有关用户状态的数据没有返回到视图中,并且“状态”和“操作”列没有正确呈现。
我希望我不必使用 jQuery 的 html() 方法或类似方法从成功回调中“静态地”更新视图。
function(){
console.log(id);
console.log(role);
//change columns html here
}
我应该怎么做才能“动态”更新视图?
【问题讨论】:
-
为什么你不必在成功回调中使用 html 或类似的东西? Ajax 只是做一件事来发送和接收数据,而不是重新加载页面......您可以让用户活动的服务器端脚本触发的唯一方法是重新加载页面。话虽如此,您可以重新加载 div 或特定元素,但在我看来,这首先否定了使用 Ajax 的功效,因为您将整个页面作为响应,而 jquery 只是挑选更新的 div。为此,堆栈上有大量资源,只需搜索 jquery Ajax reload div。
-
仅供参考,我有一个类似的系统并执行以下操作:pastebin.com/n8JXsLsf
-
您很可能需要一个相对 URL,例如:
/'users/activate在您的 ajax 成功函数中,您不会从控制器/'users/activate获得任何“反馈”。如果您可以将控制器添加到帖子中,那就太好了... -
在此处发布图片时,您应该将其他人的电子邮件地址空白。
标签: php jquery mysql ajax codeigniter