【问题标题】:Process data while in for loop json response在for循环json响应中处理数据
【发布时间】:2015-06-17 12:26:57
【问题描述】:

我正在为自己的目的进行一个实验项目,但我被困在我获取数据的部分。

我正在寻找某种方式/函数,例如 PHP 中用于 javascript 的 flush() 函数,因为我正在从 MySQL 数据库中获取大约 1000 条记录并通过 JSON 对其进行解析。在没有向用户显示一些反馈的情况下需要一段时间,页面会持续加载一段时间,然后所有内容都会立即弹出,这是我的浏览器必须同时处理的大量图像。

我正在寻找可以转储已经获取的数据并将其发送到我的函数的东西。

我有一个迭代,以 100 为增量循环 maxResults 并进行 ajax 调用

for(var record = 0; record < maxResults; record+=countPage){
     $.ajax({
        type: "POST",
        url: "json_GetImages.php?limit="+countPage+"&rows="+record,
        contentType: "application/json; charset=utf-8",
        global: false,
         ....
            for (var i = 1; i < jsonObj.data.length; i++) {
                var box = document.createElement('div'); //Define new box
                var size = Math.floor((Math.random()*3)+1);
                 .... 
                functionMakeDiv(jsonObj.data[i].sTitle);
                 ....

在 javascript/jquery 中是否有类似刷新/转储函数的东西,我可以将其放置在两个迭代中? 还是我在这里工作完全没有效率?

我已经尝试使用 for each,但结果相同。

使用 php,您只需在迭代中放置一个 flush()/ob_flush(),它会返回当前的迭代数据(转储缓冲区)(我记得什么?)

提前谢谢你,我希望你们能理解我在这里解释的内容:)

【问题讨论】:

  • 据我所知,没有办法按照您的想法进行操作,您可以将工作卸载到服务器,然后从服务器传递 html。看看你在做什么,我会诚实地使用 angularjs,这样你就可以远离 dom 操作。
  • 我可以通过 PHP '回显' div,可能会工作,但是我初始化的插件来订购和调整这些 div 的大小,不能正常工作吗?不过我可以试试,让服务器处理一切

标签: javascript jquery json iteration progress


【解决方案1】:

我看不到您将这些 div 放在实际 DOM 的什么位置,但如果同步循环阻止浏览器刷新布局,您可以尝试:

var i = 0;
function loop() {

  //Do your processing and inserting elements into DOM here...
  //That's like a body of a for loop, but asynchronous

  i++;
  if(i < jsonObj.data.length)
    setTimeout(loop, 0);
}

loop();

某些浏览器会在执行 javascript 时冻结视觉更新并刷新 DOM。这种循环方式的作用是让浏览器有机会在实际循环之间刷新页面布局,因为setTimeout 始终是异步的,即使有0 的延迟也是如此。

希望对你有帮助,干杯

【讨论】:

  • 我还发现:gent.ilcore.com/2011/03/… 可能会有帮助
  • 得到相同的结果,但记下该答案以供将来参考!我的函数创建一个 div ( var box = document.createElement('div'); ) 并将其附加到一个容器 ( $('#container').append(box) )
  • 也许尝试使外部循环异步(和内部循环就像你在你的问题中一样)?它应该已经是异步的,因为 ajax 调用,但也许不是......
猜你喜欢
  • 1970-01-01
  • 2021-03-20
  • 2016-01-25
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多