如何使用关键字过滤JSON数组对象?

时间:2012-01-12 19:42:32

标签: php javascript jquery arrays filter

我正在尝试找到一种方法来获取用户创建的关键字数组并过滤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,然后将其附加到屏幕

我还有一个无效的删除过滤功能。也许有人可以帮助我。

2 个答案:

答案 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。