Ajax调用循环,Ajax jQuery

3
我在这里需要一些建议。
我遇到了这种情况,想要通过AJAX(使用jQuery)获取一些JSON数据。
我的想法是,我需要比一个或两个Ajax调用更多的数据才能获得所需的所有数据。
因此,我需要进行多个Ajax调用,并尝试找到最佳的方法来做到这一点(最佳实践)。
我脑海中首先出现的一个想法是这样的(现在只是在寻找逻辑,可能会有一些语法错误甚至更糟的情况):
var dataArr = {
    page:0,
    pageSize : 1000
};


var StoreData = [];

var getSomeData = function () {

    $.ajax({
        type : "GET",
        url : URL,
        data : dataArr,
        dataType : "json",
        error : OnLoadError,
        success :function(data, status){

            StoreData.push[data];
            if(data.length){
                dataArr.page = dataArr.page + 1
                getSomeData();
            }

        }
    });
};

附加信息:

可能需要进行4-9个Ajax调用,以获取所有数据(4000-9000项)。

我测试了pageSize : 1000,运行良好,因此每次调用可以确保获取1000个项目。

如果您能提供一些建议、对现有方法进行一些更改或找到另一种更好的方法,甚至提供一些示例,我将非常感激。

谢谢大家!

2个回答

1
你可以在服务器端设置一个标志,当完成时将其放入成功函数的状态参数中。这样可以简化你的代码。否则,你可以简单地添加一个 while 循环,将调用定义为同步,并在循环条件中检查是否已完成。

我只能使用客户端,很遗憾。 - AlexC
你的方法看起来一点也不错。只是在最后多了一个请求。尝试通过在实际执行ajax调用之前添加条件来避免这种情况。 //更新-我刚刚发现,你不能这样做...如果你没有检查,你甚至不知道它是否为空。 - AgnosticMantis
好的,让我们面对现实吧。你有着未定义数量的请求,没有任何服务器端报告告诉你是否收到了最后一个包裹。我没有比你更好的想法,只能像你一样添加额外的请求。但是嘿,如果这不是你的服务器,你就不用担心了,对吧? ;) - AgnosticMantis
如果有数据,那很好,如果没有,我只需要进行一次调用,并检查是否没有数据,我已经不再关心了。 - AlexC
我认为这是你能做到的最好的。虽然不是最干净的方法,但只要你有这些限制,你就必须接受它。 - AgnosticMantis

0
首先,您需要优化页面大小。将其定义为1000是简单的方法。如果应用程序的性能不重要,则不必阅读本答案的其余部分:)
我建议采用试错法。制作一个for循环,尝试不同的页面大小(如20、50、100、500、1000、1500等)。然后记录每个页面大小的请求数和所有请求的总时间。比较这些数字,并明智地选择您的页面大小。
其次,如果您能够计算来自服务器的元素数量,则最后可能不必发送不必要的请求。假设您正在获取4650个数据。您获得了1000、+1000、+1000、+1000和+650。如果您某种方式弄清楚您获得的少于1000,您就不会发送最后一个请求,对吧?假设响应格式如下:
<li class='item'>XXX</li>
// All list items 
<li class='item'>YYY</li>

使用jQuery计算li元素的数量,如果少于页面大小,则表示您已获取所需的所有数据。

最后,如果您知道总数据长度超过4000,则可能希望将前4个请求异步发送。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接