如何在几个ajax调用中使用一个函数?

时间:2011-08-22 13:07:51

标签: javascript jquery

为了避免重复,我希望在几个ajax调用中使用函数。怎么回事?

像:

//use of content this function in other function(ajax call)
$(function num_bg () {
    var total = $('.pag a', '.ser').size();
    if (total == 0) {
        $('.number').css('display','none');
    }
});

// First ajax call
    function pagination(e) {
    e.preventDefault();
    var dataObj = $('form').serialize();
    $.ajax({
        type: "POST",
        dataType: "html",
        url: 'dirc',
        data: dataObj,
        cache: false,
        success: function (html) {
            var $html = $(html);
                $('#num_count').replaceWith($html.find('#num_count'));
                $('tr#paginate').replaceWith($html.find('tr#paginate'));
                $('.pagination').replaceWith($html.find('.pagination'))
                $('#erro_find').remove();

        num_bg (); // This is same function above (this don't work)
        }
    });
    return false;
}
$('form').live('change', pagination);
$('.pag a').live('click', pagination);
$('#input').live('keyup', pagination);


 //Second ajax call
$('#delete').click(function(e){        
    e.preventDefault();
    $.ajax({
        type: "POST",
        url: 'diuarsl',
        data: dataString,
        cache: false,
        success: function(html){
            var $html = $(html);                       
                    $('#num').replaceWith($html.find('#num_count'));
                    $('tr#pag').replaceWith($html.find('tr#paginate'));
                    $('.pag').replaceWith($html.find('.pagination'));

                num_bg (); // This is same function above (this don't work)
                }
        }
    })
});

2 个答案:

答案 0 :(得分:2)

问题是你的函数已经封闭了。闭包这种方式非常有用,因为它意味着您不会使用变量(例如窗口)污染任何其他命名空间。

删除newbg函数周围的$(...)

  // num_bg is now available as a global
function num_bg () {
    var total = $('.pag a', '.ser').size();
    if (total == 0) {
        $('.number').css('display','none');
    }
}

$( num_bg ); // invoke the function when the DOM is ready

jQuery中的$(function() { });会将处理程序附加到DOM ready事件。通常,如果您正在使用DOM,那么您需要将所有代码包装在其中。

答案 1 :(得分:1)

只需删除函数表达式周围的$(..)调用(并将其作为函数声明)。