从javascript中读取实时日志文件

时间:2016-02-17 08:56:25

标签: javascript jquery ajax

我使用以下代码从文本日志文件中读取数据,该文件不断增长。

setInterval(call, 1000);

function call() {
  $.ajax({
    type: "GET",
    url: "GenNumber.txt",
    dataType: "text",
    success: function(data) {
      readdata(data);
    },
  });
}

我的查询是,ajax是在每次调用中读取完整文件还是从上次调用中添加(新)添加的行。如果它在每次调用中读取整个文件,则当文件越来越大时它可能会崩溃。有没有办法只读取上次调用中的新行,并在文件停止增长时停止程序。

由于

2 个答案:

答案 0 :(得分:3)

您可以使用headers参数的settings参数来ajax()函数设置Range HTTP标头,以限制您接收的数据。< / p>

一些例子:

bytes=9500-

将开始以偏移9500发送数据。

bytes=-500

将发送最后500个字节。 这要求HTTP服务器支持范围(大多数都支持)。

Range标头记录在RFC 7233

采用您的示例代码:

$.ajax({ 
        type: "GET", 
        url: "GenNumber.txt", 
        dataType: "text", 
        success: function (data) { readdata(data); }, 
        headers: {
            "Range" : "bytes=-500"
        }
    });

答案 1 :(得分:1)

作为neuhaus答案的补充,使用Range标题,您可以从客户端存储已读取的总字节数。
因此,在每次请求时,您将只收到自上次调用以来附加的数据。

var byteRead=0;
setInterval(function(){

   $.ajax({ 
        type: "GET", 
        url: "GenNumber.txt",
        dataType: "text", 
        success: function (data) {  
            byteRead+= data.length;
            readdata(data);
        }, 
        headers: {
            "Range" : "bytes="+byteRead+"-"
        }
    });
},1000);