【发布时间】:2015-04-27 04:56:52
【问题描述】:
早上好,
我正在使用以下代码在某种程度上模仿 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 专家,尤其是在自执行函数和闭包方面,所以请对我温柔一点!
邓肯
【问题讨论】:
-
Is it because of the self-executing function宾果游戏! -
出于兴趣,后端是什么?我问的原因是,您可以通过 signal-r:signalr.net 在客户端接收消息,而不是轮询。只是一个想法,这些天民意调查有点过时了。
-
它是 PHP。有没有相当于 signalr 的?
标签: javascript jquery closures