我的 WCF REST 服务工作正常,getJSON() 和 autocomplete() 也可以工作 - 但是调用 WCF 服务的结果为空,除非我在 Firebug 中设置了调试点。如果我不设置调试点,getJSON 方法有时只会返回 JSON 。
似乎 getJSON 方法不会等待我的 WCF 服务的响应——这可能需要一两秒钟。在我的 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(我在上面注释掉)时禁用异步回发,但我觉得这是一个 hack。
考虑到 WCF REST 服务和 jQuery/Ajax 的普遍性,我敢打赌还有另一种解决方案——或者以正确的方式禁用异步回发?