【问题标题】:How to use keywords to filter a JSON array object?如何使用关键字过滤 JSON 数组对象?
【发布时间】:2012-02-09 02:34:30
【问题描述】:

我正在尝试找到一种方法来获取用户创建的关键字数组并过滤 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 数组,然后使用 keywords 数组过滤来自 JSON 对象的 data.log,然后附加到屏幕上。

我还有一个不起作用的删除过滤器功能。也许有人可以帮助我。

【问题讨论】:

    标签: php javascript jquery arrays filter


    【解决方案1】:

    删除事件处理程序应该删除父 td 元素

    $(".delete_filter").click(
      function(){
        $(this).parent().remove(); 
      }
    );
    

    执行此操作时,您可能还想从关键字数组中删除关键字。

    至于过滤日志,将关键字数组传递给可以过滤的服务器。这将节省服务器返回的数据大小。如果您需要做客户端,请提供一个示例响应以指示返回数据的结构。

    【讨论】:

      【解决方案2】:

      似乎此工具不断获得更多结果。您可能希望在服务器端过滤结果以减少带宽和客户端负载。您可能还想过滤以前的结果,这可以在 javascript 中完成。如果没有关于数据的更多信息,我们几乎没有什么可以推荐的。

      我不确定日志中的数据是什么样的,但我会举个例子:

      1/12/2012 登录用户名成功

      1/12/2012 登录用户名失败

      您的关键字可能是成功(您不想看到成功的关键字)。因此,在您的 while 循环中,检查条目是否具有关键字(成功),如果没有则仅添加它。

         while ($buffer = fgets($handle)) { 
            //if $buffer does not contain keywords
                  $log .= $buffer . "<br />\n";
          } 
      

      请原谅我的伪代码,我不会写 php。

      【讨论】:

      • 谢谢。我添加了 PHP 代码来提供帮助。如果您认为我应该在服务器端进行过滤,那么我将如何修改我的 PHP 函数来做到这一点?
      • 日志文件中的数据是什么样的?你在过滤什么?您希望将关键字传递给服务器,如果给定的日志条目与它们匹配,则不会包含它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多