私の 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 がどれほど一般的であるかを考えると、これに対する別の解決策があると思います。または、非同期ポストバックを無効にするのは正しい方法ですか?