AJAX请求很慢,找不到其他页面上的解决方案。

9 浏览
0 Comments

AJAX请求很慢,找不到其他页面上的解决方案。

我最近开始使用ajax请求。我已经使请求工作,但加载需要几秒钟的时间。

代码-

var x = 0;
function makeTR(){
    var appendObject = "";
    for(var i = 0; i < 3; i++){
        $.ajax({
            async: false,
            type: 'GET',
            url: domain + Players[x] + domain2, 
            success: function(data) {
                appendObject = appendObject + "" + makeTD(data.player, data.rank, data.guild_rank, data.fame, data.last_seen) + "";
                x++;
            }
        });
    }
    appendObject = appendObject + "";
    return appendObject;
}

如果你需要更多的代码,我会给你,这是唯一有真正代码的部分。

对不起,如果有其他帖子,我找了一段时间。

提前感谢!

0
0 Comments

AJAX请求很慢,找不到其他页面上的解决方法

问题原因:

在上述代码中,通过AJAX发送了一个GET请求。然而,在success回调函数中,x++是异步执行的,因此在执行完success回调函数之前,x的值不会被递增。这导致每次调用AJAX时,x的值始终为1,从而导致请求的结果不符合预期。

解决方法:

为了解决这个问题,我们需要确保x的值在发送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++;
    },
    async: false // 添加此行代码,将AJAX请求设置为同步执行
});

通过在AJAX请求中添加"async: false"的设置,可以将AJAX请求设置为同步执行。这样,x的值将在发送AJAX请求之前得到递增,确保每次调用AJAX时x的值符合预期。

0
0 Comments

问题的原因是代码中的ajax请求是按顺序执行的,如果每个请求需要1秒,那么整个函数就需要3秒。解决方法是使用异步代码,利用promise和/或回调函数并行执行。以下是使用promise的示例代码。

// 这个函数返回一个'promise'
function makeTr() {
   var requests = []
   // 不要使用async: false,而是收集$.ajax的返回值。
   // 这些返回值是promise,你可以在其他调用中使用它们。
   for (var x=0; x<3; x++) requests.push($.ajax(domain + Players[x] + domain2))
   // 等待所有promise都被解析后,执行渲染函数。
   // 下面的第一个return返回一个'promise',该'promise'包含你的'appendObject'
   return Promise.all(requests).then(function(allData) {
      // allData是一个包含$.ajax调用结果的数组。
      var appendObject = ""
      for (var x=0; x < 3; x++) {
        var data = allData[x]
        appendObject += ""
        ....
        appendObject += ""
      }
      return appendObject 
   })
}

现在你可以像这样调用这个函数。

makeTr().then(function(rows) {
  $(...).append(rows)
})

但你最好阅读一下promise、回调函数和异步javascript的相关内容,因为这是javascript的最佳部分之一。

这不会并行运行。[Js不是多线程的。异步调用是延迟执行的,但仍在单个线程上运行](http://stackoverflow.com/a/8963287/542251)。根据实际情况,这可能会或者不会“加快速度”。

你是正确的Liam,感谢你指出我用词不当。但是,尽管页面上的JS不是多线程的,但浏览器可能是多线程的,底层的http请求可能是并行的。

0