【问题标题】:getJSON doesn't wait for my WCF REST servicegetJSON 不等待我的 WCF REST 服务
【发布时间】:2012-08-19 03:55:54
【问题描述】:

我的 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 的普遍性,我敢打赌还有另一种解决方案 - 还是以正确的方式禁用异步回发?

【问题讨论】:

    标签: jquery asp.net wcf rest


    【解决方案1】:

    您在分配之前尝试使用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 });
    
            }
        });
    });
    

    【讨论】:

    • 感谢您的快速回复。我有一种感觉,我错过了一些简单/明显的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多