Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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
Javascript AJAX请求速度慢,可以';在其他页面上找不到解决方案_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript AJAX请求速度慢,可以';在其他页面上找不到解决方案

Javascript AJAX请求速度慢,可以';在其他页面上找不到解决方案,javascript,jquery,ajax,Javascript,Jquery,Ajax,我最近开始使用ajax请求。我的请求正在工作,但加载需要几秒钟 代码- var x=0; 函数makeTR(){ var appendObject=“”; 对于(变量i=0;i

我最近开始使用ajax请求。我的请求正在工作,但加载需要几秒钟

代码-

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)
})