Javascript Ajax请求加载时间过长
我有一个关于传奇联盟的网站。 我要求从暴乱游戏API根据球员的名字统计。 然后我得到了关于json的信息。 然后我使用ajax将信息从php页面转到主页面。 但加载确实需要很长时间。 我注意到它每秒钟读取一个json注册表 以下是我的ajax代码:Javascript Ajax请求加载时间过长,javascript,php,jquery,json,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')
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'
}
}
})
}
函数getStats(召唤者ID、API密钥){
var Topuser=召唤师\u ID
var theStatsDiv=document.getElementById('死亡')
$.ajax({
url:'getKey.php',
键入:“post”,
数据类型:“json”,
async:false,
数据:{urlinked:'https://'+regionSelected+'.api.pvp.net/api/lol/'+regionSelected+'/v1.3/stats/by caller/'+caller_ID+'/ranked?seasure=seasure2016&api_key='},
成功:函数(json){
var user=Topuser
for(var i=0;imaxDifference){
difChampionName=“”
最大差异=0
最大差异=tempDif
最大比率=比率
difChampionName=json.name
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
var user=Topuser
console.log(错误抛出)
如果(ErrorSprown==='未找到'){
}
}
})
var结果=香槟图标。替换(/[^A-Z0-9]+/ig')
$(“#champion”+i).附加(“”)
$('#championWrapper'+i).append(''+championIcon+'
'))
$('#champion'+i).css('background-image','url(http://ddragon.leagueoflegends.com/cdn/img/champion/splash/“+result+”_0.jpg)”)
如果(比率>=50){
$('#championWrapper'+i).append(“Stuff…”)
}
如果(比率<50){
$('#championWrapper'+i).append(“更多内容…”)
}
}
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
var user=Topuser
console.log(错误抛出)
如果(ErrorSprown==='未找到'){
document.getElementById('Deathers')。innerHTML='NotFound'
}
}
})
}
我该怎么做才能让ajax调用运行得更快?
我还有另外两个函数,但它们只从json数组中读取一个内容。
非常感谢您抽出时间。
很抱歉我的英语不好,如果代码看起来不好,也很抱歉。(我还没有50个代表,所以我添加了这个作为答案。)
你有没有理由不抓取:
/api/lol/static data/{region}/v1.2/champion
然后对返回的所有json数据进行排序?这样,您就可以在一个ajax调用中获得所需的所有信息,并且可以运行一个循环来创建表,并进行任何您想进行的计算
通过为每个冠军单独进行此操作:
/api/lol/static data/{region}/v1.2/champion/{id}
您得到的数据是相同的(据我所知),但您是通过多次ajax调用获得的,这使得您的速度非常慢。(我还没有50次重复,所以我添加了这个作为答案。)
你有没有理由不抓取:
/api/lol/static data/{region}/v1.2/champion
然后对返回的所有json数据进行排序?这样,您就可以在一个ajax调用中获得所需的所有信息,并且可以运行一个循环来创建表,并进行任何您想进行的计算
通过为每个冠军单独进行此操作:
/api/lol/static data/{region}/v1.2/champion/{id}
你得到的数据是相同的(据我所知),但你是通过多次ajax调用得到的,这让你的速度非常慢。为什么不尝试在通道中检索数据..而不是在一个目标中,同时删除
async:false
我真的需要计算,比如玩家的最佳英雄等。我必须通过一次调用读取所有json的数组来实现这一点,我想……为什么不尝试在通道中检索数据……而不是在一个goan中,并删除async:false
我真的需要计算东西,比如玩家的最佳英雄等。我必须通过一次调用读取所有json的数组来实现这一点,我认为。。。