PHP和ajax没有更新发生

时间:2010-04-26 16:03:24

标签: php javascript ajax jquery

我有一个看起来像这样的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。但是,一旦删除,我希望能够刷新列表以显示它已经发生,目前没有任何反应,直到我手动刷新。

5 个答案:

答案 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应该被检查。

相关问题