Ajax返回响应

时间:2014-01-14 22:49:44

标签: jquery ajax

我正在尝试创建一个可重用的函数,我可以在其中传递arg,并基于该执行ajax调用。到目前为止,这就是我得到的:

ajaxFunc: function(url, method, args) {
    return {
        var URL = url,
            METHOD = method,
            ARGS = args,
            ERROR = error,
            index = -1,
            ajaxResponse,
            AJAX = function() {
                var url = URL + ((args == null) ? '' : ('/' + ARGS )),
                    data = (METHOD == 'post') ? ARGS[index] : undefined,
                    thisObject = this;

                $.ajax({
                    url:url,
                    method:METHOD,
                    data: data,
                    dataType: 'json',
                    error: function(jqXHR, textStatus, error) {
                        console.error(jqXHR, textStatus, error)
                    },
                    success: function(response) {
                        ajaxResponse = response;
                    }
                });

                return ajaxResponse;
            };

        AJAX();
    };
};

我的问题是,如何让return工作? - 当我调用该函数时,我可以看到ajax调用,但函数永远不会返回响应。

例如:如果我MAIN.util.ajaxFunc('http://url.com/', 'get', null);我得不到任何回报。我希望找到一种可以进行ajaxFunc调用的方法,然后检查响应,如果response.length做了什么。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

问题是ajax是异步的。我会做这样的事情:

使用延期:

ajaxFunc: function (url, method, args) {
    //...

    return $.ajax({
        url: url,
        method: METHOD,
        data: data,
        dataType: 'json',
        error: function (jqXHR, textStatus, error) {
            console.error(jqXHR, textStatus, error)
        }
    });
};

MAIN.util.ajaxFunc('http://url.com/', 'get', null).done(function(response) {

});

或使用callbacK:

ajaxFunc: function (url, method, args, callback) {
    //...

    return $.ajax({
        url: url,
        method: METHOD,
        data: data,
        dataType: 'json',
        error: function (jqXHR, textStatus, error) {
            console.error(jqXHR, textStatus, error)
        },
        success: function (response) {
            callback(response);
        }
    });
};

MAIN.util.ajaxFunc('http://url.com/', 'get', function(response) {

});

答案 1 :(得分:0)

使用这样的异步操作,不要返回响应。相反,将数据传递给另一个需要它的函数。从那里链接的任何函数都必须是新链的一部分,如下所示:

success: function(response) {
  myFunction(response);
}

不是使用这样的回调,而是使用promises。这完成了同样的事情,但避免功能嵌套。它看起来像这样:

$.ajax({
    url: url,
    method: METHOD,
    data: data,
    dataType: 'json',
}).then(function (data) {
    myFunction(data);
});

在此处详细了解承诺:http://api.jquery.com/category/deferred-object/