AJAX请求很慢,找不到其他页面上的解决方案。
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 + " "; return appendObject; }" + makeTD(data.player, data.rank, data.guild_rank, data.fame, data.last_seen) + " "; x++; } }); } appendObject = appendObject + "
如果你需要更多的代码,我会给你,这是唯一有真正代码的部分。
对不起,如果有其他帖子,我找了一段时间。
提前感谢!
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的值符合预期。
问题的原因是代码中的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请求可能是并行的。