0

これが私のコードです:

<script type="text/javascript">
$(document).ready(function () {
    $(".list tr:even").addClass("even");
    var cityList = [];
    $("#autocomplete").autocomplete({
        source: function () {
            $.ajax({
                type: "POST",
                url: "flight/fillcitydropdownlist",
                data: "{'cityname':'" + $('#autocomplete').val() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    if (data.cities.length > 0) {
                        for (var i = 0; i < data.cities.length; i++) {
                            cityList.push(data.cities[i].Main);
                        }
                    }
                    return cityList;
                }
            })
        }
    })
});

これが機能しない理由がわかりません。ページの下部に ul 要素が追加されていますが、 li は追加されていません。cityList は満たされていますが。問題は、オートコンペレット ソースに配列を渡す方法に関連していますか?

4

1 に答える 1

3

ソース関数から値を返すことはできません。2 番目の引数としてコールバック関数を受け取ります。応答が返ってきたら、応答データをコールバック関数に渡す必要があります。

$(document).ready(function () {
    $(".list tr:even").addClass("even");
    var cityList = [];
    $("#autocomplete").autocomplete({
        source: function (request, callback) {
            $.ajax({
                type: "POST",
                url: "flight/fillcitydropdownlist",
                data: "{'cityname':'" + request.term + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    callback($.map(data.cities, function(obj){
                        return obj.Main
                    }))
                }
            })
        }
    })
});
于 2013-09-22T10:54:08.657 に答える