Ajax调用工作一次,但后来不更新我的数据(codeigniter)

时间:2014-01-12 17:17:56

标签: jquery ajax codeigniter

我有一个页面显示框中的内容。这些框上方有四个按钮,点击它们时会过滤下面的内容。我第一次按下任何按钮时,过滤器工作得很好,但是如果我第二次按下按钮则不起作用。

我只更换过滤后的内容div(方框),因此用于过滤的按钮不会被替换。我假设某种绑定/链接问题,但未能触及它的底部。

任何帮助表示感谢。

我的观点(我的点击功能中的console.log始终显示正确的按钮ID):

$(document).ready(function () {

jQuery('.btnSubmit').on('click', function(e){
    e.preventDefault();
    var mypage_id = this.id;
    console.log(mypage_id);
    var url = "http://localhost/site/get_list_view";

        $.ajax({

            url: url,
            type: 'POST',               
            data: { my_data: this.id},
            cache: false,
            success : function(data){ 

                if(data){
                     $('.deals').replaceWith(data);
                }
            }
        });

});});

我的控制器(缩小它只是回显我的数据,并在每次命中时创建一个随机数 - 数据和数字在第一次命中后永远不会改变):

public function get_list_view(){

    $my_data = $this->input->post('my_data');
    echo($my_data);
    echo(rand(10,100));}

任何提示?

干杯

1 个答案:

答案 0 :(得分:2)

我会说它是因为在你运行这一行之后:

$('.deals').replaceWith(data);

具有“.deals”类的html元素完全被您的ajax响应替换。如果您的ajax响应没有包含“.deals”类的包含元素,则在刷新页面之前它将永远不会再有效。

你也可以简单地重写一行来说:

$('.deals').html(data);

然后你的响应不需要有一个“.deals”包装类元素,因为你不再替换它,而是用响应填充它。

如果没有您的所有代码,以上是我最好的猜测。另一个猜测是,有时jquery事件处理程序在ajax刷新内容后没有正确重新处理,在过去我们使用“live”来处理它,但它被替换为.on的新用法:

$( document ).on( events, selector, data, handler );  

所以在你的情况下看起来像:

jQuery(document).on('click', '.btnSubmit', function(e) {
    ... rest of your code