javascript - Ajax 请求加载时间过长

标签 javascript php jquery json ajax

我有一个关于英雄联盟的网站。 我根据玩家姓名请求防暴游戏 API 的统计数据。 然后我就得到了json的信息。 然后我用ajax从php页面获取信息到主页。 但加载时间确实太长了。 我注意到它每秒读取一个 json 注册表。

这是我的ajax代码:

function getStats (SUMMONER_ID, API_KEY) {
  var Topuser = SUMMONER_ID
  var theStatsDiv = document.getElementById('deaths')
  $.ajax({
    url: 'getKey.php',
    type: 'post',
    dataType: 'json',
    async: false,
    data: {urlLinked: 'https://' + regionSelected + '.api.pvp.net/api/lol/' + regionSelected + '/v1.3/stats/by-summoner/' + SUMMONER_ID + '/ranked?season=SEASON2016&api_key='},
    success: function (json) {
      var user = Topuser

      for (var i = 0; i < json.champions.length; i++) {
        if (json.champions[i].id != 0) {
          var wins = json.champions[i].stats.totalSessionsWon
          var loses = json.champions[i].stats.totalSessionsLost
          var $div = $('<div>', {id: 'champion' + i, class: 'championClass', 'percentage': wins + loses})
          $('#deaths').append($div)

          var ratio = 0

          if (wins == 0) {
            ratio = 0
          }
          if (loses == 0) {
            ratio = 100
          }
          if (wins != 0 && loses != 0) {
            ratio = (wins / (wins + loses)) * 100
            ratio = ratio.toFixed(0)
          }


          $.ajax({
            url: 'getKey.php',
            type: 'post',
            dataType: 'json',
            async: false,
            data: {urlLinked: 'https://global.api.pvp.net/api/lol/static-data/' + regionSelected + '/v1.2/champion/' + json.champions[i].id + '?api_key='},
            success: function (json) {
              championIcon = json.name
              var tempDif = 0
              tempDif = wins - loses
              if (tempDif > maxDifference) {
                difChampionName = ''
                maxDifference = 0
                maxDifference = tempDif
                maxRatio = ratio
                difChampionName = json.name
              }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
              var user = Topuser
              console.log(errorThrown)
              if (errorThrown === 'Not Found') {
              }
            }
          })

          var result = championIcon.replace(/[^A-Z0-9]+/ig, '')
          $('#champion' + i).append('<div class="championWrapper" id="championWrapper' + i + '">')
          $('#championWrapper' + i).append('<p class="championName">' + championIcon + '</p><br>')
          $('#champion' + i).css('background-image', 'url(http://ddragon.leagueoflegends.com/cdn/img/champion/splash/' + result + '_0.jpg)')


          if (ratio >= 50) {
            $('#championWrapper' + i).append("Stuff.....")
          }
          if (ratio < 50) {
            $('#championWrapper' + i).append("More stuff.....")
          }

        }
      }

    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      var user = Topuser
      console.log(errorThrown)
      if (errorThrown === 'Not Found') {
        document.getElementById('deaths').innerHTML = 'not found'
      }
    }
  })

}

如何才能使 ajax 调用运行得更快? 我还有另外 2 个函数,但它们只从 json 数组中读取一件事。 非常感谢您的参与。 抱歉我的英语不好,如果代码看起来很糟糕,我也很抱歉。

最佳答案

(我还没有 50 次代表,所以我将其添加为答案。)

您是否有任何不捕获的原因:

/api/lol/static-data/{region}/v1.2/champion

然后对您将得到的所有 json 数据进行排序?这样,您就可以在一次 ajax 调用中获得所需的所有信息,并且可以运行循环来创建表,并进行您想要进行的任何计算。

通过为每个冠军单独执行此操作:

/api/lol/static-data/{region}/v1.2/champion/{id}

你得到的是相同的数据(据我所知),但你是通过多个ajax调用来获取它的,这会让你的速度变得非常慢。

关于javascript - Ajax 请求加载时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38431727/

相关文章:

javascript - 如果文本框中输入的值的名称或 itemid 已知,如何知道该值

JavaScript 错误。 Uncaught ReferenceError

javascript - 为什么 Closure 在使用 function.apply 时不对参数进行类型检查?

php - SQL插入到重复键

javascript - 动态生成指令字段的指令无法编译

javascript - 我的函数参数有问题还是其他什么问题?

javascript - 将 DOM 节点作为属性传递给 Polymer

javascript - 当 div 包含不相等的属性时隐藏它

PHP 阻止直接访问 php 页面

php - CodeIgniter PHPWord 作为第三方使用