0

当我有:

$('#blah').on('click', function(){
    $.ajax({
        //blah
    })
});

我工作得很好,上面的代码只发出一次ajax请求,但是当我有时:

$('body').on('click', '#blah', function(){
    $.ajax({
        //blah
    })
});

这个发送ajax请求很多次,有时两次,有时更多。而且我必须使用第二个代码,因为#blah对象本身是由另一个 ajax 请求添加到页面的,第一个代码不起作用。

问题是什么?我也在return false;代码末尾使用过,但不起作用......

我将不胜感激任何帮助。


MORE INFO:

假设我有一个容器,容器内有按钮,容器本身已由早期的 ajax 请求加载,例如:

$('a[rel="show_product_detail"]').on('click', function(){
        var product_id = $(this).attr('id');
        $('.companycontent').html('');
        $('.companycontent').addClass('members_content_loading');
        $('.companycontent').load('modules/companies/companies_tabs/product_details.php?product_id='+ product_id', function() {
            $('.companycontent').removeClass('members_content_loading');
        });
        return false;   
    });

现在在容器中我有另一个按钮导致容器的新内容,对于这些按钮我必须使用第二个代码,因为这些按钮是通过 ajax 加载的。现在通过单击容器内的按钮,ajax 请求发送多次(取决于容器重新加载的时间)。

4

1 回答 1

-1

在您的第一个请求中触发“成功”之后,您将动态内容添加到页面,一旦完成,在您将其绑定到点击侦听器的代码之后

$.ajax({
//...

success:function (data){
$(data).appendTo(".companycontent"); //inserts #blah
$("#blah").bind("click",function(){
//ajax code 
})

});

或者您可以在需要时构建一个新对象并创建实例

function AJAX(){
this.url="";
this.control="";
this.run = run;`
}

function run(){

$.ajax({

url:this.url,

success:function (data){
$(data).appendTo(".companycontent"); //inserts #blah
$("#blah").bind("click",function(){
//
});
}
});

最后获取新实例并初始化对象。如果您更好地修改它,这个对象会非常好

var test= new AJAX();
test.url="myajax.com/ajax";
test.control=Get_news(); // for example a click event
test.run();
于 2013-05-19T10:42:59.533 回答