Javascript回调&ajax执行函数

时间:2015-02-26 10:07:30

标签: javascript ajax callback

我需要一些帮助才能理解如何解决这个问题。

我需要编写一个对象的代码,它允许我们注册几个不同的函数来执行单个公共回调函数。

该对象的目的是执行所有已注册的函数,然后,一旦完成所有这些函数,它应该执行定义的回调函数。

比方说 如果我调用MyFuncs.start(),MyFuncs对象将开始异步执行所有已注册的函数。一旦最后一个返回,它将最终执行回调函数。

有人可以在线指导一些资源或帮助我知道如何解决这个问题。

我已经编写了一个代码来实现这一点,但我不知道为什么它没有给我想要的结果。 有人可以帮助我,请告诉我这是否是正确的做法。

我的代码是

var MyNewClass=(function()
{
    return function()
    {
        this.registeredFunctions=2;
        this.count=0;
        this.function1=function()
        {
            $.ajax(
            {
                url: '/echo/html/',
                success: function(data) 
                {
                    alert('request complete');
                    this.markDone();
                }
            })
        };

        this.function2=function()
        {
            $.ajax(
            {
                url: '/echo/html/',
                success: function(data) 
                {
                    alert('request complete');
                    this.markDone();
                }
            })

        };

        this.register=function(newFunction)
        {
            this['function'+(++registeredFunctions)]=newFunction;

        };

        this.start=function()
        {
            this.function1();
            this.function2();
        };

        this.callback=function()
        {
            alert("I am callback");
        };

        this.markDone=function()
        {
            this.count++;
            if(this.count==this.registeredFunctions)
            {
                alert("all function executed,calling callback now");
                callback();
            }

        };
    };

})();
$(document).ready(function()
{
    $('.start').click(function(){
        var o=new MyNewClass();
        o.start();
    });
});

注意:我不能使用$ .when的jQuery,因为在这里用户可以发送任何函数进行注册,并且定义的函数不一定会返回给我一个延迟对象。

这就是我不能在这里使用$。的原因。

好吧,我已经找到了解决方案,我在这里发布,以便对其他人有所帮助。

解决方案如下:

1 个答案:

答案 0 :(得分:0)

这是我的js文件,其中定义了我的类和所有函数

var MyNewClass=(function()
{
    return function()
    {
        this.registeredFunctions=0;
        this.count=0;
        this.register=function(newFunction)
        {
            this['function'+(++this.registeredFunctions)]=newFunction;

        };

        this.start=function()
        {
            for(var i=1;i<=this.registeredFunctions;i++)
                this['function'+i]();
        };

        this.callback=function()
        {
            alert("I am callback");
        };

        this.markDone=function()
        {
            this.count++;
            if(this.count==this.registeredFunctions)
            {
                alert("all function executed,calling callback now");
                this.callback();
            }

        };
    };

})();

用户将注册函数的另一个js文件

$(document).ready(function()
{
    $('.start').click(function(){
        var o=new MyNewClass();
        function a()
        {
            $.ajax(
            {
                url: '/echo/html/',
                success: function(data) 
                {
                    alert('new complete');
                    o.markDone();
                }
            })

        };
        o.register(a);
        o.start();
    });
});