无法让ajaxStop()/ ajaxComplete()工作

时间:2014-05-22 04:30:37

标签: javascript jquery ajax

我有以下JS功能:

function getInfo(s,n) {
    $.ajax({
        type : 'POST',
        url : 'includes/stock_summary.php',
        timeout : 10000,
        data : {
            s : s
        }
    })
    .done(function(data) {
        function IsJsonString(str) {
            try {
                JSON.parse(str);
            } catch (e) {
                alert("Unable to communicate with Yahoo! Finance servers. Please try again later.");
            }
            return true;
        }
            $.ajax({
            type : 'post',
            url : "includes/stock_desc.php",
            data : {
                s : s
            }
        })
        .done(function(desc) {
            $('#desc').html(desc);
        })
        if(data.change.charAt(0) == '+') {
            $('#change').css('color','#090');
            $('#puPrc').html('<img src="images/pu_prc_up.png">&nbsp;');
        }
        if(data.change.charAt(0) == '-') {
            $('#change').css('color','#D90000');
            $('#puPrc').html('<img src="images/pu_prc_dwn.png">&nbsp;');
        }
        var ask = data.ask+" <small>x "+data.askSize+"</small>";
        var bid = data.bid+" <small>x "+data.bidSize+"</small>";
        var change = data.change+" ("+data.changePc+")";
        $('#ask').html(ask);
        $('#lt').html(data.lastTrade);
        $('#ytd').html(data.ytdReturn);
        $('#bid').html(bid);
        $('#dayHigh').html(data.dayHigh);
        $('#dayLow').html(data.dayLow);
        $('#prevClose').html(data.prevClose);
        $('#vol').html(data.vol);
        $('#yearHigh').html(data.yearHigh);
        $('#yearLow').html(data.yearLow);
        $('#change').html(change);
        $('#stockName').html(n);
        $('#sym').html(s.toUpperCase());
        $('#open').html(data.sOpen);
    })
    .fail(function(e) {
        alert("Unable to communicate with Yahoo! Finance servers. Please try again later.");
    })

    $('#chart').html("<img src='http://chart.finance.yahoo.com/z?s="+s+"&t=3m&q=l&l=on&z=m'>");
    $('.popUp').bPopup();
}

使用onClick()调用它。

该功能本身可以正确完成工作,但我只想触发该行:

$('.popUp').bPopup();

其他一切都已完成。

我使用了$.ajaxStop()$(document).ajaxStop()$.ajaxComplete()$(document).ajaxComplete()

我已经在功能的内部,外部,上方和下方尝试了它们,但似乎无法让它做到我需要的东西!

它唯一有效的时间是在函数之外但它然后在页面加载时运行,我显然不希望发生这种情况。我只希望它在函数完成时运行。

如果有人可以帮我解决这个问题,请帮忙!

1 个答案:

答案 0 :(得分:0)

如果您只有一个ajax调用,则需要添加.always处理程序,该处理程序将在所有.done.fail处理程序完成后执行。

.always(function() {
    $('.popUp').bPopup();
});

如果您的网页上有多个ajax调用,并且您希望在完成所有调用后触发代码,请使用ajaxStop事件。

$(function() {
    $(document).on('ajaxStop', function() {
        $('.popUp').bPopup();
    });
});