jQuery传递回调函数但使用返回值

时间:2015-04-28 15:22:55

标签: javascript jquery ajax callback

好的,让我们开始,

我在javascript中创建了一个ajax命名空间,只是为了让它更容易记住需要插入的值才能让它工作。

(function (ns) {
    ns.type = "POST";
    ns.url = "/";
    ns.data = {};
    ns.success = function() {};

    ns.send = function() {
        $.ajax({
            type: ns.type,
            url: ns.url,
            data: ns.data,
            success: ns.success()
        });
    }

}(fps.ajax));

使用它我做以下

var ajax = fps.ajax;
ajax.url = "/credit/getBalance";
ajax.type = "GET";
ajax.success = function (e) {
    navCredits.text(navCredits.text().f(e));
};
ajax.send();

现在我遇到的问题是我的成功功能。

我传递了一个变量,我希望我的ajax函数可以用作它的返回数据,但它并没有以这种方式发生。

我对此的理解是,(e)没有声明设置成功函数的位置,因此为什么我会得到一个未定义的值。

我的问题是,有没有办法通过"参数传递函数"该函数应该使用它自己的函数值吗?

我不觉得我解释得很好,但希望那里有足够的代码来帮助你理解我想要实现的目标。

亲切的问候

1 个答案:

答案 0 :(得分:2)

您正在执行您的成功功能,而不是将其指定为处理程序。从“success:ns.success()”行中删除()。

ns.send = function() {
    $.ajax({
        type: ns.type,
        url: ns.url,
        data: ns.data,
        success: ns.success  // you don't want to execute
    });
}

当你在函数引用之后放入“()”时,它将在那一刻执行它。在你的情况下,它正在执行一个空函数,如几行所定义。使用事件参数的成功函数被声明为正常,但从未被使用过。

当您删除“()”时,它会将该功能对象分配给该属性。当你添加“()”时,它会在那一刻执行函数并将返回值赋给属性。当jQuery“ajax”调用成功完成时,成功函数在该对象上执行,因此它们处理当时添加的“()”。 ;)