Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用同步请求客户端的技术->;服务器_C#_Asp.net_Ajax_Asp.net Mvc 5_Signalr - Fatal编程技术网

C# 使用同步请求客户端的技术->;服务器

C# 使用同步请求客户端的技术->;服务器,c#,asp.net,ajax,asp.net-mvc-5,signalr,C#,Asp.net,Ajax,Asp.net Mvc 5,Signalr,我正在使用GamesDB.com的API获取所有游戏平台以及每个平台上的所有游戏。 现在,我从一个空白页面开始,在document.ready上,我对服务器进行AJAX调用以获取所有平台。然后,我必须为每个平台执行另一个AJAX调用,以获得该平台上的游戏数(例如,PC有2342个游戏,XBOX有453个游戏,…)。 我打这个电话的原因也是为了给用户提供一个进度条(0-100%),并在平台的所有游戏中显示游戏的数量: / 因此,在这些API调用之后,我应该有一个所有平台的列表,可以单击这些平台来启

我正在使用GamesDB.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.NETMVC5应用程序。如果可以简化的话,我可以使用javascript、c#、signer、jquery和任何其他javascript库。

为什么不能显示浮动的
加载消息

$('#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%调用的数据获取。它应该是同步的,以使“显示进度”系统工作。我试图找出进行同步调用的最佳方法是什么。