Javascript 如何从AJAX回调中的setTimeout()内调用存储在一组选项中的函数?

Javascript 如何从AJAX回调中的setTimeout()内调用存储在一组选项中的函数?,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是我的相关代码: success: [ setTimeout(function () { ajax.success }, 250), //... 奇怪的是,我可以在success:[]选项中调用ajax.success,但是当它包装在setTimeout()中时就会停止工作 我认为最有效的方法是在执行此代码之前将ajax.success选项分配给函数,但是我不确定如何执行 非常感谢您

这是我的相关代码:

success: [
             setTimeout(function () {
                    ajax.success
             }, 250),
         //...
奇怪的是,我可以在
success:[]
选项中调用
ajax.success
,但是当它包装在
setTimeout()
中时就会停止工作

我认为最有效的方法是在执行此代码之前将
ajax.success
选项分配给函数,但是我不确定如何执行


非常感谢您的帮助,如果这是重复的,我深表歉意。我找不到类似的东西。

这就是你的意思吗

function doWork() {
console.log('test');
}

$.ajax({
    url: 'xxx',
    success: function() {
     setTimeout(function() {
        doWork();
      }, 1000);
     }
});

这就是你的意思吗

function doWork() {
console.log('test');
}

$.ajax({
    url: 'xxx',
    success: function() {
     setTimeout(function() {
        doWork();
      }, 1000);
     }
});

success
callback接受处理程序或处理程序列表。但是,调用
setTimeout
的结果是与该超时关联的唯一ID。这不是一个函数。因此,您可能想要的是:

success: [
    function() {
        setTimeout(function () {
            doStuff();
        }, 250),
    },
    // ...
]
如果您的函数需要使用一些参数,那么您可以这样包装它:

success: [
    function() {
        var self = this,
            args = arguments;

        setTimeout(function () {
            doStuff.apply(self, args);
        }, 250),
    },
    // ...
]

请注意,
参数
是关键字。还要注意使用
.apply

成功
回调接受处理程序或处理程序列表。但是,调用
setTimeout
的结果是与该超时关联的唯一ID。这不是一个函数。因此,您可能想要的是:

success: [
    function() {
        setTimeout(function () {
            doStuff();
        }, 250),
    },
    // ...
]
如果您的函数需要使用一些参数,那么您可以这样包装它:

success: [
    function() {
        var self = this,
            args = arguments;

        setTimeout(function () {
            doStuff.apply(self, args);
        }, 250),
    },
    // ...
]

请注意,
参数
是关键字。还要注意
.apply

的使用,您能发布整个ajax调用吗<代码>成功:[
看起来无效。ajax.success是一个函数引用,setTimeout返回undefined。因此,在一种情况下,您传递的是函数引用,而在另一种情况下,您传递的是undefined。这就是为什么它以一种方式工作,而不是另一种方式。@bfavaretto来自api:“从jQuery 1.5开始,成功设置可以接受一系列函数。每个函数都将依次调用。”为什么还要将
ajax.success
另外包装在匿名
function()
中。请尝试
setTimeout(ajax.success,250);
。另外,我非常确定成功参数需要使用
{}
而不是
[]
。引用的
ajax
只是传递给我正在构建的插件的一个选项。它不是预定义的,我已经在使用它了。你能发布整个ajax调用吗?
成功:[
看起来无效。ajax.success是一个函数引用,setTimeout返回undefined。因此,在一种情况下,您传递的是函数引用,在另一种情况下,您传递的是undefined。这就是为什么它以一种方式工作,而不是另一种方式。@bfavaretto来自api:从jQuery1.5开始,success设置可以接受一系列函数。每个函数都将依次调用。“为什么还要将
ajax.success
另外包装在匿名
function()
中。请尝试
setTimeout(ajax.success,250);
。另外,我非常确定您的success参数需要使用
{}
而不是
[]
。所引用的
ajax
只是传递给我正在构建的插件的一个选项。它不是预定义的,我已经在使用它了。很好,但是你有一个额外的匿名函数。在doWork()中放一个console.log('testing')函数以确保调用它。请尝试将doWork()的定义移动到文档之外的更高级别(全局范围)。ready://请尝试在此处定义它,而不是$(function(){//不要在此处定义它});为了澄清,OP中的代码在插件中。您看到的任何
ajax
选项都是从调用我的插件函数的页面传入的。很好,但是您在那里有一个额外的匿名函数。在doWork()函数中放一个console.log('testing'),以确保它甚至被调用。尝试移动doWork()的定义到文档之外的更高级别(全局范围)。ready://请尝试在此处定义它,而不是$(function(){//不要在此处定义它});澄清一下,OP中的代码在插件中。您看到的任何
ajax
选项都是从调用我的插件函数的页面传入的。不需要参数。它只是调用页面上脚本中定义的函数。脚本正在传递到我正在构建的插件中。我可以从
中调用
ajax.success
>成功:[]
设置超时()
,但它不起作用。@keyCrumbs你有没有尝试过我在更新后发布的代码?也许问题出在函数本身。不需要参数。它只是调用一个在页面脚本中定义的函数。脚本正在传递到我正在构建的插件中。我可以从中调用
ajax.success
e> 成功:[]没有
设置超时()
,但是有了它,它就不起作用了。@keyCrumbs更新后你有没有尝试过我发布的代码?也许问题出在函数本身。