【问题标题】:Technology to use synchronous requests client->server使用同步请求客户端->服务器的技术
【发布时间】:2014-08-06 04:45:01
【问题描述】:

我正在使用 thegamesdb.com 的 API 来获取所有游戏平台和每个平台上的所有游戏。 目前,我从一个空白页面开始,在 document.ready 上,我对服务器进行 AJAX 调用以获取所有平台。然后我必须为每个平台进行另一个 AJAX 调用以获取该平台上的游戏计数(例如,PC 有 2342 个游戏,XBOX 有 453 个游戏,...)。 我也这样做的原因是为用户提供一个进度条(0-100%)并在平台的总游戏中显示游戏数量: /

所以在这些 API 调用之后,我应该有一个所有平台的列表,可以单击这些平台来启动另一个服务器端调用,为每个游戏进行 api 调用,以获取它的数据。当一个平台被点击时,客户端每次都会发送一个新的调用,以便服务器将游戏数据放入数据库中。然后我们做gamecounter++。

我已经尝试通过对服务器的 AJAX 调用来做到这一点:

$.getJSON($('#platformlist').data('url-getplatforms'), function (data) {
    self.platforms = $.map(data, function(p) { return new Platform(p); });
    console.log(self.platforms);
    $.each(self.platforms, function () {
        console.log(this);
        $.getJSON($('#platformlist').data('url-getplatformgames'), { platformId: this.id }, function (platformgamesdata) {
            this.countGamesDone = 0;
            $.each(platformgamesdata, function() {
                this.games.push(new PlatformGame(this));
                this.countGames++;
            });

        });
    });
});

但由于这是异步的,因此无法显示进度,只会使浏览器加载,直到所有游戏都在数据库中而没有任何反馈。 我可以将 AJAX 设置为 async:false,但我读到还有其他方法可以做到这一点,但没有人说如何做到这一点。

这样做的其他选择是什么?我对使用什么技术没有任何限制。这是一个 ASP.NET MVC 5 应用程序。如果这可以简化这一点,我可以使用 javascript、c#、signalr、jquery 和任何其他 javascript 库。

【问题讨论】:

    标签: c# asp.net ajax asp.net-mvc-5 signalr


    【解决方案1】:

    为什么不能显示浮动的loading 消息?

    $('#bigFatLoadingMessage').show();
    
    $.getJSON($('#platformlist').data('url-getplatforms'), function (data) {
        self.platforms = $.map(data, function(p) { return new Platform(p); });
        $.each(self.platforms, function () {
    
            //update overlay message
            $('#bigFatLoadingMessage').html('Loading platform ' + this.name);
    
            $.getJSON($('#platformlist').data('url-getplatformgames'), { platformId: this.id }, function (platformgamesdata) {
                this.countGamesDone = 0;
                $.each(platformgamesdata, function() {
                    this.games.push(new PlatformGame(this));
                    this.countGames++;
                });
    
            });
        });
    
        $('#bigFatLoadingMessage').hide();
    });
    

    【讨论】:

    • 正如问题中所说,我试图展示一个进度,因为它超过 16k 的 API 调用,所以只是一个 gif 转了大约 10 分钟并没有太多的反馈给用户如何还有很多电话要来
    • 那么为什么不能更新叠加层中的文本呢?你得到了它的 ID 并且知道你什么时候加载其他东西
    • 因为我现在做的方式是异步的,所以它会启动 50-100 个请求,然后再给出第一个反馈,然后继续。此外,调用没有完成,因为下一个调用在第一个调用完成之前完成,并且它跳过了 99% 的调用的数据获取。应该使其同步以使“显示进度”系统工作。我正在尝试找出进行同步调用的最佳方式。
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2014-05-25
    • 1970-01-01
    • 2023-03-20
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多