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 に答える