1

私の WCF REST サービスは正常に動作し、getJSON() と autocomplete() も動作しますが、Firebug でデバッグ ポイントを設定しない限り、WCF サービスへの呼び出しの結果は null です。デバッグ ポイントを設定しない場合、getJSON メソッドは JSON のみを返すことがあります

getJSON メソッドは、WCF サービスからの応答を待機していないようです。これには 1 ~ 2 秒かかることがあります。jQuery にデバッグ ポイントを配置すると、WCF が JSON を返す時間がある間、スクリプトが「一時停止」します。

// Changing the selected item of the DropDownList will submit a different clientId
// to the WCF service. The result is used for the autocomplete()

$(document).ready(function () {
    var availableTags = "";
    $('#<%=ddlClients.ClientID %>').change(function () {
        var selectedClientId = $('#<%=ddlClients.ClientID %> option:selected').val();

        if (selectedClientId != -1) {
            //$.ajaxSetup({ async: false });
            $.getJSON("People.svc/getpeople", { ClientId: selectedClientId }, function (json) {
                availableTags = json;
            });
            //$.ajaxSetup({ async: true });

            $('#tbSearch').autocomplete({
                source: availableTags,
                minLength: 2
            });
        }
    });
});

私が思いついた唯一のことは、getJSON の呼び出し中に非同期ポストバックを無効にすることでした (上記でコメントアウトしました) が、これはハックのように感じます。

WCF REST サービスと jQuery/Ajax がどれほど一般的であるかを考えると、これに対する別の解決策があると思います。または、非同期ポストバックを無効にするのは正しい方法ですか?

4

1 に答える 1

2

割り当てられる前に使用しようとしていavailableTagsます。リクエストが完了すると成功関数が呼び出され、getJSON 呼び出しの後のコードがすぐに実行されます。成功のコールバックによって返されたデータを使用します。コードをコールバック自体に配置することをお勧めします。

$(document).ready(function () {
    var availableTags = "";
    $('#<%=ddlClients.ClientID %>').change(function () {
        var selectedClientId = $('#<%=ddlClients.ClientID %> option:selected').val();

        if (selectedClientId != -1) {
            //$.ajaxSetup({ async: false });
            $.getJSON("People.svc/getpeople", { ClientId: selectedClientId }, function (json) {
                availableTags = json;
                $('#tbSearch').autocomplete({
                    source: availableTags,
                    minLength: 2
                });
            });
            //$.ajaxSetup({ async: true });

        }
    });
});
于 2012-08-19T04:04:53.427 に答える