getJSON不等待我的WCF REST服务

时间:2012-08-19 03:55:54

标签: jquery asp.net wcf rest

我的WCF REST服务工作正常,getJSON()和autocomplete()也可以工作 - 但是除非我在Firebug中设置调试点,否则对WCF服务的调用结果为null。如果我没有设置调试点,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时禁用异步回发(我在上面注释掉了),但我觉得这是一个黑客攻击。

考虑到WCF REST服务和jQuery / Ajax的常见程度,我认为还有另一个解决方案 - 或者是以正确的方式禁用异步回发?

1 个答案:

答案 0 :(得分:2)

您在分配之前尝试使用availableTags,当您的请求完成时将调用success函数,getJSON调用之后的代码将立即执行。 Ti使用成功回调返回的数据我建议你把你的代码放在回调本身。

$(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 });

        }
    });
});