Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript读取实时日志文件_Javascript_Jquery_Ajax - Fatal编程技术网

从javascript读取实时日志文件

从javascript读取实时日志文件,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用以下代码从不断增长的文本日志文件中读取数据 setInterval(call, 1000); function call() { $.ajax({ type: "GET", url: "GenNumber.txt", dataType: "text", success: function(data) { readdata(data); }, }); } 我的问题是,ajax是在每次调用中读取完整的文件还是在上次调用中(新)添加

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

setInterval(call, 1000);

function call() {
  $.ajax({
    type: "GET",
    url: "GenNumber.txt",
    dataType: "text",
    success: function(data) {
      readdata(data);
    },
  });
}
我的问题是,ajax是在每次调用中读取完整的文件还是在上次调用中(新)添加的行。如果它在每次调用中读取整个文件,当文件大小越来越大时,它可能会崩溃。有没有办法只从上次调用中读取新行,并在文件停止增长时停止程序


谢谢

您可以使用()函数的
设置
参数的
标题
参数来设置
范围
HTTP标题以限制您接收的数据

一些例子:

bytes=9500-
将在偏移量9500处开始发送数据

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

范围标头记录在中

以您的代码为例:

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

您可以使用()函数的
设置
参数的
标题
参数来设置
范围
HTTP标题,以限制您接收的数据

一些例子:

bytes=9500-
将在偏移量9500处开始发送数据

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

范围标头记录在中

以您的代码为例:

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

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

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);

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

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);

代码=>setInterval(调用,1000);函数调用(){$.ajax({type:“GET”,url:“GenNumber.txt”,dataType:“text”,success:function(data){readdata(data);},},});}请不要使用注释提供附加信息。代码=>setInterval(调用,1000);函数调用()。但我在控制台中看到的唯一问题是,当文件停止增长时会出现一些错误消息。有没有更好的方法来处理这个问题。获取304(未修改)k.cors.a.crossDomain.send@jquery.min.js:4 n.extend.ajax@jquery.min.js:4(匿名函数)@just.html:36是否有错误?如果文件没有被修改,那么您就没有数据可以读取。在
url:“GenNumber.txt”
中,只要用文件的正确url替换
GenNumber.txt
,在将cache:false添加到ajax后,错误304就消失了,但现在当文件停止增长时,我收到错误“416(请求的范围不可满足)”。看起来浏览器要求一些范围,但没有得到它。@没关系,只要抓住错误,一秒钟后再试一次,这对我来说绝对有效。但我在控制台中看到的唯一问题是,当文件停止增长时会出现一些错误消息。有没有更好的方法来处理这个问题。获取304(未修改)k.cors.a.crossDomain.send@jquery.min.js:4 n.extend.ajax@jquery.min.js:4(匿名函数)@just.html:36是否有错误?如果文件没有被修改,那么您就没有数据可以读取。在
url:“GenNumber.txt”
中,只要用文件的正确url替换
GenNumber.txt
,在将cache:false添加到ajax后,错误304就消失了,但现在当文件停止增长时,我收到错误“416(请求的范围不可满足)”。浏览器似乎在请求某个范围,但没有得到该范围。@没关系,只需捕获错误并在一秒钟后重试即可