Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
侦听要调用的JavaScript函数_Javascript_Jquery_Javascript Events_Event Handling - Fatal编程技术网

侦听要调用的JavaScript函数

侦听要调用的JavaScript函数,javascript,jquery,javascript-events,event-handling,Javascript,Jquery,Javascript Events,Event Handling,我有以下函数,每2秒调用一次以加载一些数据。它注册函数[do]来处理响应中的内容。(示例已简化) 我想知道是否有任何方法可以创建一个每次调用[do]函数时都会调用的函数,而不需要在do函数中添加对侦听器的调用。谢谢,这是事先准备好的。如果有更好的方法使用jquery,比如插件,我将非常感谢您的帮助 [编辑]关键不在于它是否有效。我的问题是,是否可以向allready实现的“do”函数添加自定义侦听器。像addActionListener(“do”、“after”、doSomeThingElse)

我有以下函数,每2秒调用一次以加载一些数据。它注册函数[do]来处理响应中的内容。(示例已简化)

我想知道是否有任何方法可以创建一个每次调用[do]函数时都会调用的函数,而不需要在do函数中添加对侦听器的调用。谢谢,这是事先准备好的。如果有更好的方法使用jquery,比如插件,我将非常感谢您的帮助

[编辑]关键不在于它是否有效。我的问题是,是否可以向allready实现的“do”函数添加自定义侦听器。像addActionListener(“do”、“after”、doSomeThingElse)这样的东西,这样我就可以在do函数完成后做其他事情。

Replace

success: do(response)


首先,您的简化版本不起作用,因为您需要传递
do
函数,而不是调用它

function doRequest (){
    $.ajax({ url: 'www.google.com.pe', success: _do });
}

但听起来您好像在询问如何在每次调用
do
时运行其他代码

如果
do
仅在
doRequest()
函数中调用,则只需将其他代码添加到在正确的时间调用
do
的匿名函数中即可

function doRequest (){
    $.ajax({ url: 'www.google.com.pe', success: function(response) {
          // Run your other code
          //   or invoke another function.
          _do(response);
    } });
}
如果希望它更通用,可以创建一个函数装饰器,它返回一个函数,该函数在其他代码之后调用
do

function doFactory(fn) {
    return function() {
        fn.apply(this, arguments);
        _do.apply(this, arguments);
    }
}
然后生成如下函数:

var doFoo = doFactory(function() {
    console.log("foo");
});
function doFactory(fn) {
    return function(response) {
        _do.call(this, fn.call(this, response));
    }
}

如果您的需求更具体地涉及到
响应的预处理
,您可以像这样对其进行返工:

var doFoo = doFactory(function() {
    console.log("foo");
});
function doFactory(fn) {
    return function(response) {
        _do.call(this, fn.call(this, response));
    }
}
然后让
fn
操纵并返回
响应

var doFoo = doFactory(function(response) {
    return response + "foo";
});

如果您想保持现有代码不变,可以将
do()
包装到另一个函数中,该函数依次调用
do()
和您的新函数(比如
do\u this\u well()

请参见下面的示例(我将
do()
重命名为
do\u this()
,以避免混淆保留关键字
do
)。这是因为全局函数只是包含函数对象的变量。在这种情况下,可以使用调用旧函数的新函数覆盖这些变量:

function do_this(response) { ... }

(function()
{
    var previous=do_this;
    do_this=function(response) { previous(response); do_this_as_well(); }
})();

2000
=2秒而不是2分钟。设置间隔的时间是毫秒。。这只是一个注释,不要命名函数
do
do
在Javascript中是一个保留字。顺便说一句,对于
setInterval
的参数,需要翻转-函数首先出现,然后是毫秒:谢谢,动态生成示例,错误很大。我想您正在寻找Javascript中的观察者模式:所以,我明白了,没有办法将侦听器添加到已经内置的函数中。我想您可以将do()封装在另一个函数中,该函数的工作方式类似于侦听器,但JavaScript并不能提供您所需的本机功能。因此,我想解决方案是修改来自ajax请求的成功回调。有没有办法在运行时做到这一点(我不能更改代码)-顺便说一句,谢谢你的答案。请查看我在运行时替换do()的另一个答案。有点尝试使用相同的代码,所以我的问题更多的是关于添加一个“eventListener”@jaxkodex:关于你的编辑,不,你不能直接修改
do
(至少没有一些黑客的
.toString()
eval
技巧)或者将某个事件绑定到其调用。但是您可以轻松地将
do
包装到另一个执行其他工作的函数中。有几种方法可以实现这一点。您将第一个函数过度包装,并将相同的旧功能包装到一个新函数中,以执行我需要调用的操作;它会保留来自ajax回调的引用吗?很难实现y在不知道自己在做什么的情况下,你说你的示例被简化了。但是如果你传递一个响应参数,这个参数将被转发。我知道它将覆盖它,并且示例(就在那里)当ajax请求成功时,调用“do_this”函数是否有效。这很有意义,特别是因为您添加了“为什么”。我做对了吗?