V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
andybest
V2EX  ›  问与答

JQuery 的 $.get 能否逐步显示内容?

  •  
  •   andybest · 2014-11-05 14:29:06 +08:00 · 2399 次点击
    这是一个创建于 3664 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如代码:
    $.get("test.jsp",function(data){
    $("#output").append(data);
    });

    是获取 test.jsp 的内容,并 append 到 #output,

    现在的问题是 test.jsp 中显示的内容是逐步输出的:

    out.print("1");out.flush();
    Thread.sleep(1000);
    out.print("2");out.flush();
    Thread.sleep(1000);
    out.print("3");out.flush();
    Thread.sleep(1000);
    out.print("ok");out.flush();

    每打印一个数字,sleep(1000),直接在浏览器打开 test.jsp 也可以看到这种效果
    但 $.get("test.jsp"... 无法将这种效果消失出来,总是等到该页面完全处理完成后一次显示出所有内容

    将其逐步显示的效果在 #output 中展现出来?
    8 条回复    2014-11-06 04:55:51 +08:00
    oott123
        1
    oott123  
       2014-11-05 14:32:06 +08:00
    $.get("test.jsp?step=1",function(data){
    ----$("#output").append(data);
    ----setTimeout(function(){
    --------$.get("test.jsp?step=2",function(data){
    ------------$("#output").append(data);
    --------});
    ----});
    });
    oott123
        2
    oott123  
       2014-11-05 14:32:25 +08:00
    setTimeout 漏了个参数orz
    byc8888
        3
    byc8888  
       2014-11-05 14:34:30 +08:00
    建议把数据一次提交 减少对服务器的请求次数
    然后用$.each遍历出来可以达到效果
    byc8888
        4
    byc8888  
       2014-11-05 14:39:08 +08:00
    $.post("test.jsp",{a:1,b:2},function(d){
    --- $.each(d,function(i,v){
    ------- setTimeout('$("#output").append('+ v.data+')',100)
    ---})
    },'json');
    服务端输出JSON数据JQ遍历出来!!
    andybest
        5
    andybest  
    OP
       2014-11-05 14:52:16 +08:00
    @oott123 @byc8888
    test.jsp 中输出1,2,3只是举个例子,实际上是无法修改 test.jsp 中的代码的
    byc8888
        6
    byc8888  
       2014-11-05 15:03:34 +08:00
    var strs= new Array();
    $.post("1.php",{a:1,b:2},function(d){
    var d="2,2,3,5,6,6";//这里的d就是function的数据 实际使用中把这行去掉 我放这里只是你调试看效果 希望能帮到您
    var i=0;
    strs=d.split(",");

    $.each(strs,function(v){
    i++
    setTimeout('$("#output").append('+ v+')',i*1000)
    })

    });
    SoloCompany
        7
    SoloCompany  
       2014-11-06 01:16:07 +08:00   ❤️ 1
    jquery.ajax 封装似乎没有针对这个进行优化

    最直接的方法还是直接面向 XMLHttpRequest 编程吧
    通过 onreadystatechange 事件,在 readyState 转变为 LOADING 的时候 setup 一个 timer/interval 去定期获取 responseText 的内容(holds partial data)并执行你自己的逻辑

    最后在 readyState 转变为 DONE 的时候 clear interval
    andybest
        8
    andybest  
    OP
       2014-11-06 04:55:51 +08:00
    @SoloCompany 灵!!!

    有没针对这个需求的 JQuery 方法封装呢?类似 readSteam getSteam 之类。。。
    真的要自己写一个吗(伸手党又来了)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:51 · PVG 03:51 · LAX 11:51 · JFK 14:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.