1

我正在使用 jQuery。我有一个从名为“get_cats”的远程服务器获取数据的函数。我调用它来用返回的值填充一个数组。AJAX 完成后,我想返回这些值。但它不起作用,返回的值是未定义的。这是非常基本的,但我看不出它失败的地方。有人有线索吗?

$(function () {
        var url = "http://someurl.com/service/";
        var cats = [];
        cats = get_cats(url);

        function get_cats(url) {
            var categories = [];
            $.getJSON(url + "cats", function (data) {
                $.each(data, function (i) {
                    categories.push(data[i].name);
                });
                return categories;
            });
        }

        $(document).ajaxStop(function () {
            console.log(cats); // fails and returns undefined :'(
        });

    });
4

2 回答 2

5

哦,没有 AJAX 是异步的,你不能从中返回任何东西。您应该只在成功回调中使用 AJAX 请求的结果:

$(function () {
    var url = "http://someurl.com/service/";
    get_cats(url);

    function get_cats(url) {
        var categories = [];
        $.getJSON(url + "cats", function (data) {
            $.each(data, function (i) {
                categories.push(data[i].name);
            });
            // Only here you can consume the results of the AJAX request
            // Do not attempt to return them, it doesn't make any sense
            console.log(categories);
        });
    }
});
于 2013-02-08T08:25:45.207 回答
-1

你可以试试:

$.ajaxSetup({async:false});

在 AJAX 调用之前。

但它会在返回响应时停止浏览器。

于 2013-02-08T08:31:00.687 回答