早上好,
我正在使用以下代码来模仿使用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 || "") + '×tamp='+$.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专家,特别是在自动执行功能和闭包方面,所以请温柔地对待我!
邓肯
答案 0 :(得分:0)
你编写了自调用函数,这些函数在生命周期中只执行一次。如果要多次调用函数,则可以将其写为普通函数。