1

スタックオーバーフローで同様の投稿をたくさん見ましたが、どちらもうまくいきませんでした。入力に基づいて都市を返す単純な AJAX ENABLED WCF サービスがあります。

 [OperationContract]
    public IEnumerable<string> GetCities(string prefix)
    {
        string[] cities = new[] { "New York", "Atlanta", "Los Angeles", "Las Vegas", "Arizona", "New Hampshire", "New England" };

        if(!String.IsNullOrEmpty(prefix))
        {
            cities = cities.Where(a => a.ToLower().StartsWith(prefix.ToLower())).ToArray();
        }

        return cities;
    }

今、jquery ui のオートコンプリートを使用して、このメソッドを呼び出そうとしています。問題は、プレフィックス パラメーターをメソッド呼び出しに渡す必要があることですが、何をしようとしても、プレフィックス パラメーターがクエリ文字列として url に追加されます。これが私が持っているjQueryコードです

$("input[type=text][id*=autocompleteBox]").autocomplete({
    source: function (request, response) {
        var dataCity = {'prefix': request.term};
        $.ajax({
            url: "http://localhost:1939/Cities.svc/GetCities",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(dataCity),
            success: function (data) {
                response($.map(data, function (item) {
                    return {
                        label: data
                    }
                }));
            }
        });
    },
    minLength: 0
});

リモートデータソースを呼び出すには 3 つのオプションがあることを知っています。最初のオプションは上記のコードですが、この方法で文字列化された json の結果が URL に追加されます。

次に、サービスの url を source オプションに単純に渡そうとしましたが、同じ結果が得られました ( term=myinput が url に追加されました)。

多くのエントリがあるため、3 番目のオプション (ローカル データを含む配列) を使用できません。それらすべてをクライアントに保持したくありません。

では、プレフィックス パラメータを Service Method に渡すにはどうすればよいでしょうか。これは可能ですか、またはjquery uiのオートコンプリートウィジェットを使用することを選択した場合、URLが追加されたパラメーターに固執する必要がありますか?

4

2 に答える 2

2

ajax 呼び出し (typeパラメーター) で指定された HTTP メソッドが表示されないため、デフォルトで GET になり、GET にはコンテンツを含めることができません。GET の使用時にデータを渡す唯一の方法は、URL パラメーターを使用することです。ところで。メソッドはデータを取得するだけなので、GET リクエストを使用する必要があります。

したがって、JSON の代わりに、次のように送信します。

var dataCity = "prefix=" +  encodeURIComponent(request.term);
于 2012-04-12T10:31:09.027 に答える
1

実は、私はコードでいくつかの間違いを犯しました。返された結果、この場合は data.d をマップする必要があります。これが作業コードです。

$("input[type=text][id*=autocompleteBox]").autocomplete({

        source: function (request, response) {

            var data = { 'prefix': request.term};

            $.ajax({
                type: "POST",
                url: "http://localhost:1939/Cities.svc/GetCities",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify(data),
                processdata: true,
                success: function (result) {
                    response($.map(result.d, function (item) {
                        return {
                            label: item
                        };
                    }));
                },
                error: function (er) {
                    alert(er);
                }
            });
        },
        minLength: 1,
        open: function () {
            $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
        },
        close: function () {
            $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
        }
    });
于 2012-04-12T19:07:28.167 に答える