Javascript AJAX请求速度慢,可以';在其他页面上找不到解决方案
我最近开始使用ajax请求。我的请求正在工作,但加载需要几秒钟 代码-Javascript AJAX请求速度慢,可以';在其他页面上找不到解决方案,javascript,jquery,ajax,Javascript,Jquery,Ajax,我最近开始使用ajax请求。我的请求正在工作,但加载需要几秒钟 代码- var x=0; 函数makeTR(){ var appendObject=“”; 对于(变量i=0;i
var x=0;
函数makeTR(){
var appendObject=“”;
对于(变量i=0;i<3;i++){
$.ajax({
async:false,
键入:“GET”,
url:domain+Players[x]+domain2,
成功:功能(数据){
appendObject=appendObject+“”+makeTD(data.player、data.rank、data.guild\u rank、data.fame、data.last\u seen)+“”;
x++;
}
});
}
appendObject=appendObject+“”;
返回附加对象;
}
如果你需要更多的代码,我会给你,这是唯一有真正的代码的部分
对不起,如果还有其他帖子,我找了一会儿
提前谢谢 $.ajax({
$.ajax({
type: 'GET',
cache : false,
url: domain + Players[x] + domain2,
success: function(data) {
appendObject = appendObject + "<td>" + makeTD(data.player, data.rank, data.guild_rank, data.fame, data.last_seen) + "</td>";
x++;
}
});
键入:“GET”,
cache:false,
url:domain+Players[x]+domain2,
成功:功能(数据){
appendObject=appendObject+“”+makeTD(data.player、data.rank、data.guild\u rank、data.fame、data.last\u seen)+“”;
x++;
}
});
$.ajax({
键入:“GET”,
cache:false,
url:domain+Players[x]+domain2,
成功:功能(数据){
appendObject=appendObject+“”+makeTD(data.player、data.rank、data.guild\u rank、data.fame、data.last\u seen)+“”;
x++;
}
});
如注释中所述,您的代码速度很慢,因为它一个接一个地执行ajax请求,如果每个请求需要一秒钟,那么您的函数需要三秒钟。您需要接受异步代码,并使用承诺和/或回调使其并行工作。下面是一个使用承诺的示例
// this function returns a 'promise'
function makeTr() {
var requests = []
// Don't use async: false, but collect the return values of $.ajax.
// Those are promises, which you can use in other calls.
for (var x=0; x<3; x++) requests.push($.ajax(domain + Players[x] + domain2))
// Wait until all promises are resolved, then perform the
// rendering function. The first return below returns a 'promise'
// of your 'appendObject'
return Promise.all(requests).then(function(allData) {
// allData is an array containing the results of your $.ajax
// calls now.
var appendObject = ""
for (var x=0; x < 3; x++) {
var data = allData[x]
appendObject += "<tr>"
....
appendObject += "</tr>"
}
return appendObject
})
})
但您最好通读承诺、回调和异步javascript。因为这是javascript最好的部分之一。正如注释中所指出的,您的代码很慢,因为它一个接一个地执行ajax请求,如果每个请求需要一秒钟,那么您的函数需要三秒钟。您需要接受异步代码,并使用承诺和/或回调使其并行工作。下面是一个使用承诺的示例
// this function returns a 'promise'
function makeTr() {
var requests = []
// Don't use async: false, but collect the return values of $.ajax.
// Those are promises, which you can use in other calls.
for (var x=0; x<3; x++) requests.push($.ajax(domain + Players[x] + domain2))
// Wait until all promises are resolved, then perform the
// rendering function. The first return below returns a 'promise'
// of your 'appendObject'
return Promise.all(requests).then(function(allData) {
// allData is an array containing the results of your $.ajax
// calls now.
var appendObject = ""
for (var x=0; x < 3; x++) {
var data = allData[x]
appendObject += "<tr>"
....
appendObject += "</tr>"
}
return appendObject
})
})
但您最好通读承诺、回调和异步javascript。因为这是javascript最好的部分之一。
async:false
就是原因。还有更好的选择async:false是不推荐的。无论何时关闭,它都不会加载实际数据,我尝试寻找更好的方法等待加载,但大多数都只是执行.done(function(){.
这也不太好它从不加载实际数据
-确实如此,只是不同步-使用上面的异步代码你需要小心,因为这三个请求可能也不一定按照预期的顺序完成-学习并接受异步代码你正在做3个ajax调用,而不是那样做nce,获取所有数据,并将后端交换机中的ur API的质量导入async
到true
(或删除)并尝试使用promises
以确保它返回任何数据。async:false
是原因。有更好的选择。async:false
从来都不被推荐。每当它关闭时,它都不会加载实际数据,我尝试寻找更好的方法等待加载,但大多数人只是在做。完成(功能(){.
这也不太好它从不加载实际数据
-确实如此,只是不同步-使用上面的异步代码你需要小心,因为这三个请求可能也不一定按照预期的顺序完成-学习并接受异步代码你正在做3个ajax调用,而不是那样做nce,获取所有数据,并将后端交换机中的ur API的质量导入async
到true
(或删除)并尝试使用承诺
以确保它返回任何数据。成功后x++值将递增,需要2或3秒,因此调用ajax async时x值始终为1。成功后x++值将递增,调用ajax async时x值始终为1。这不会并行运行。具体取决于实际上,这种情况可能发生,也可能不会“加速”。你说得对,利亚姆,谢谢你指出我用词不当。但是,尽管JS(在页面上)不是多线程的,但浏览器可能是多线程的,低级http请求可能是并行的。这不会并行运行。这取决于实际发生的情况,可能会发生,也可能不会发生“加快速度”你说得对,利亚姆,谢谢你指出我用词不当。但是,尽管JS(在页面上)不是多线程的,但浏览器可能是多线程的,低级http请求可能是并行的。
makeTr().then(function(rows) {
$(...).append(rows)
})