包装jquery函数并返回一个值

时间:2011-01-20 12:49:15

标签: javascript jquery function

你可以包装这段代码,以便在调用函数时返回包含json对象的变量吗?

示例:

   function GetNewSomething() {
        var newtb = 0;
        $.get("/something/new",
                function (data) {
                    newtb = data;
                }
                );
        return newtb; // as of now this always returns undefined...
    }

尝试这种方式,但只返回undefined ..

先谢谢你们!

的问候,

4 个答案:

答案 0 :(得分:6)

你做不到。 Ajax调用是异步的。你必须将回调传递给你的函数:

function GetNewSomething(cb) {
    $.get("/something/new", cb);
}

并将其命名为:

GetNewSomething(function(data) {
    // do something with data
});

I wrote something about it

哦,如果响应是JSON字符串,您可能希望使用.getJSON,它也会将响应解码为JavaScript对象。

答案 1 :(得分:3)

.get()$.ajax()的包装器。如果没有明确配置,则所有AJAX请求都运行 asyncronously 。这反过来意味着,return newtb;语句将在$.get()完成之前发生。

解决此问题的一个好方法是自己调用另一个回调。这看起来像是:

function GetNewSomething(callback) {
    $.get("/something/new",
            function (data) {
                if( typeof callback === 'function' )
                    callback.apply(this, [data]);
            }
            );
}

然后将其称为

GetNewSomething(function(data) {
     // do something with data
});

答案 2 :(得分:0)

$.get是异步的,这就是你在get请求返回时传递一个函数来调用的原因。

答案 3 :(得分:0)

您可以更改为使$.get成为$.ajax并使其同步,因为$.get只是$.ajax的包装:

function GetNewSomething() {
        var newtb = 0;
        $.ajax({url:"/something/new",
                type:"GET",
                async:false,
                success: function (data) {
                    newtb = data;
                }
          });
        return newtb; 
    }