我正在尝试找到一种方法来获取用户创建的关键字数组并过滤JSON数组,并将结果附加到屏幕上。
以下是我正在使用的实际代码。
var keywords= [];
var interval = "";
var pointer = '';
var scroll = document.getElementById("tail_print");
$("#filter_button").click(
function(){
var id = $("#filter_box").val();
if(id == "--Text--" || id == ""){
alert("Please enter text before searching.");
}else{
keywords.push(id);
$("#keywords-row").append("<td><img src=\"images/delete.png\" class=\"delete_filter\" /> " + id + "</td>");
}
}
);
$(".delete_filter").click(
function(){
($(this)).remove();
}
);
function startTail(){
clearInterval(interval);
interval = setInterval(
function(){
$.getJSON("ajax.php?function=tail&pointer=" + pointer + "&nocache=" + new Date(),
function(data){
pointer = data.pointer;
$("#tail_print").append(data.log);
scroll.scrollTop = scroll.scrollHeight;
});
}, 1000);
}
提取拖尾信息的PHP代码:
function tail(){
$file = "/path/to/the/log/filelog.log";
$handle = fopen($file, "r");
clearstatcache();
if ($_REQUEST['pointer'] == '') {
fseek($handle, -1024, SEEK_END);
} else {
fseek($handle, $_REQUEST['pointer']);
}
while ($buffer = fgets($handle)) {
$log .= $buffer . "<br />\n";
}
$output = array("pointer" => ftell($handle), "log" => $log);
fclose($handle);
echo json_encode($output);
}
这样做的目的是允许用户过滤日志结果。因此,用户执行一个动作,启动startTail()
并$.getJSON()
检索由PHP函数构建的JSON对象并打印结果。工作完美无瑕。现在我想让用户选择过滤传入的拖尾项目。用户单击过滤器按钮,jQuery获取过滤器文本并将其添加到keywords
数组,然后使用data.log
数组过滤JSON对象中的keywords
,然后将其附加到屏幕
我还有一个无效的删除过滤功能。也许有人可以帮助我。
答案 0 :(得分:1)
删除事件处理程序应该删除父td元素
$(".delete_filter").click(
function(){
$(this).parent().remove();
}
);
您可能还希望在执行此操作时从关键字数组中删除关键字。
对于过滤日志,将关键字数组传递到可以过滤它的服务器。这将节省服务器返回的数据大小。如果您需要做客户端,请提供示例响应以指示返回数据的结构。
答案 1 :(得分:0)
似乎这个工具不断获得更多结果。您可能希望在服务器端过滤掉结果,以减少带宽和客户端负载。您可能还想过滤以前的结果,您可以在javascript中执行此操作。如果没有关于数据的更多信息,我们几乎无法推荐。
我不确定日志中的数据是什么,但我会举一个例子:
2012年1月12日登录user_name success
2012年1月12日登录用户名失败
您的关键字可能会成功(您不希望看到成功的关键字)。因此,在您的while循环中,检查条目是否具有关键字(成功),如果不是,则仅添加它。
while ($buffer = fgets($handle)) {
//if $buffer does not contain keywords
$log .= $buffer . "<br />\n";
}
原谅我的伪代码,我不写php。