【问题标题】:How am I getting the scope wrong? Unable to access this function from jQuery ".on"我怎么弄错了范围?无法从 jQuery“.on”访问此功能
【发布时间】: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 || "") + '&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 专家,尤其是在自执行函数和闭包方面,所以请对我温柔一点!

邓肯

【问题讨论】:

  • Is it because of the self-executing function宾果游戏!
  • 出于兴趣,后端是什么?我问的原因是,您可以通过 signal-r:signalr.net 在客户端接收消息,而不是轮询。只是一个想法,这些天民意调查有点过时了。
  • 它是 PHP。有没有相当于 signalr 的?

标签: javascript jquery closures


【解决方案1】:

您编写了自调用函数,这些函数在生命周期中只执行一次。如果你想多次调用一个函数,你可以把它写成普通函数。

【讨论】:

  • 那么...在这种情况下是否没有真正的理由使用自执行功能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多