我有一个看起来像这样的ajax请求,
$('input.fakecheck').click(function(){
alert("deleteing....");
$.ajax({
url:"/search",
type:"POST",
data: $(this).attr('name')+"="+$(this).attr('value')+"&remove=Remove",
success:function() {
alert(data);
}
})
})
这会调用一个看起来像这样的php函数,
private function _remove_from_short_list($cv_array)
{
if (is_array($cv_array))
{
$short_list = $this->session->userdata('short_list');
$new_list = array_diff_key($short_list, $cv_array);
$this->session->set_userdata('short_list', $new_list);
}
}
基本上发生的事情是,在我的页面上,我有一个列表,其实质上是从会话中取出的id的列表,然后用户可以通过点击和输入(这将改变)从他们的会话中删除id。但是,一旦删除,我希望能够刷新列表以显示它已经发生,目前没有任何反应,直到我手动刷新。
答案 0 :(得分:2)
您通常希望在成功函数中触发某些内容来修改列表。
假设你有这样的结构
<ul>
<li>
<input id="1" type="checkbox" class="fakecheck" />
</li>
<li>
<input id="2" type="checkbox" class="fakecheck" />
</li>
</ul>
在成功功能中,您可以在完成删除后删除li
$(this).parent().remove()
这显然没有考虑AJAX请求中的任何错误处理。如果您可以为列表发布HTML,我也可以更好地了解您尝试更改的结构。
正如Pointy所提到的,如果您要修改列表而不是获取更新列表,则必须确保您的服务器请求实际上已删除该项目。
答案 1 :(得分:0)
好吧,你将不得不发回一个更新版本的列表,然后在你的“成功”函数中做一些事情。你可以让客户端代码(Javascript)采取适当的行动,但服务器发送回更新可能更好,因为服务器是“现实”所在的地方。
答案 2 :(得分:0)
如果可以接受,那么你可以在javascript成功函数中进行页面刷新。
答案 3 :(得分:0)
而不是页面刷新,您可以在JS中调用第二个函数来更新浏览器中的HTML。将目标ID和PHP输出的HTML发送到如下函数:
function HandleResponse(response, target)
{
document.getElementById(target).innerHTML = response;
}
答案 4 :(得分:0)
然而,一旦删除,我希望能够刷新列表以显示它已经发生,目前没有任何反应,直到我手动刷新。
听起来您正在使用PHP构建页面,即PHP生成HTML,其中通过JavaScript添加了行为层。如果您要实现自己的应该更新的复选框版本,请确保在HTTP请求完成时在JavaScript(ajax.success函数回调)中处理UI更新。
我的个人建议:将页面构建移出PHP并让JavaScript代替它,无论是在页面加载还是来自Ajax请求的响应,并让PHP做一些更简单的事情,比如返回一个列表当前会话ID应该被检查。