javascript - js能否在一个http长请求中多次进行数据交互?
大家讲道理
大家讲道理 2017-04-10 16:45:01
[JavaScript讨论组]
  1. 描述你的问题
    能否在请求服务器端执行一个耗时较长的任务时,过程中会返回进度,利用http长连接

  2. 服务器端环境为 lighttpd + CGI(linux c实现,非fastcgi)

  3. 例如这里的代码,http发起一次请求后,需要等待服务器端CGI进程执行结束后才能得到返回值,而CGI在执行期间会不停打印进度。导致只有执行到100%的时候才一次性返回所有值"1%2%3%...100%",而不是依次返回更新进度。

    $.post(url, data, function(progress) {
        update(progress);
    });
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
PHP中文网

使用websocket可以满足题主的需求

天蓬老师

感谢楼上各位大神的回答,总结下最后的思路大概是这个样子的
响应头中写明响应长度,这里为100,当返回的响应长度不够时,该请求不会结束

res.writeHead(200, {
    'Content-Type': 'text/plain',
    'Connection': 'keep-alive',
    'Access-Control-Allow-Origin': '*',
    'Content-Length': 100
});

然后服务端每执行一部分后输出几个字节,这里是每执行1%的工作,写1字节,这样就会触发js端xhr的event事件,该事件的total是响应头中的content-length,这里是100,而lengthComputable是已经收到的字节数。所以通过服务器和前端的配合,这样就可以计算出执行的百分比。

目前通过nodejs做服务器是成功的,cgi还需要测试写一个字节,能否立刻触发前端的event事件,不过问题基本算是解决了,再次谢谢各位!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号