我怎么弄错了范围?无法从jQuery" .on"访问此功能

时间:2015-02-25 09:03:54

标签: javascript jquery closures

早上好,

我正在使用以下代码来模仿使用AJAX的setInterval:

//  Poll for ALERTs
(function pollForAlerts() {
    var params = { "send": 1, "poll": 1 };

    //  Set up the correct patch for sending AJAX data
    ALERTS = {};
    ALERTS.Auth = { site: data_site, uuid: data_uuid };

    ALERTS.API = function(app,data) {
         var url = "//myurl.com/alerts/"+ app +"/?";
         var data = $.extend({}, ALERTS.Auth, data);
         return url + jQuery.param(data || "") + '&timestamp='+$.now();
    }

    //  Run the AJAX request
    $.getJSON( ALERTS.API( 'touchscreen', params ) , function (response) {
        if( typeof response === "object" ) {
            for( var i = 0; i < response.length; i++ )
                renderAlert(response[i]);
        } else { setTimeout( pollForAlerts, 3000 ); }
    });
}());

该函数重复运行,直到找到响应为止。

如果单击某个元素,我想设置一个jQuery“.on”来重启这个循环:

//  Respond to ALERT
$('#alerts').on('click', 'td.initials span', function(event) {
    $(this).closest('tr').removeClass("active abs cri");
    pollForAlerts();
});

然而,当我这样做时,我在Firebug中收到以下错误:

ReferenceError: pollForAlerts is not defined
http://myurl.com/alerts/static/js/touchscreen.js
Line 14

我无法理解无法访问pollForAlerts()的原因。是因为自动执行功能,还是因为它在jQuery的on函数中使用?

我不是JavaScript专家,特别是在自动执行功能和闭包方面,所以请温柔地对待我!

邓肯

1 个答案:

答案 0 :(得分:0)

你编写了自调用函数,这些函数在生命周期中只执行一次。如果要多次调用函数,则可以将其写为普通函数。