2012-01-12 17 views
1

私は、ユーザcreatedaであるキーワードの配列を取得し、JSON配列をフィルタリングし、その結果を画面に追加する方法を見つけようとしています。キーワードを使用して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配列に追加します。のJSONオブジェクトは、keywords配列を使用してフィルタリングされ、画面に追加されます。

私はまた動作していない削除フィルタ機能を持っています。多分誰かがそれを手伝ってくれるかもしれません。

答えて

0

削除イベントハンドラは、親td要素また、あなたはそれを行う際に、キーワード列からキーワードを削除する場合があります

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

を削除する必要があります。

ログをフィルタリングする場合は、キーワード配列をフィルタリングできるサーバに渡します。これは、サーバーによって返されるデータサイズを節約します。クライアントサイドを行う必要がある場合は、返されるデータの構造を示すサンプルレスポンスを提供します。

0

このツールの結果は常に増えているようです。おそらく、サーバー側で結果をフィルタリングして、帯域幅とクライアント側の負荷を減らす必要があります。以前の結果をフィルタリングしたい場合もあります。これはjavascriptで行うことができます。データについての情報が少ししかない場合は、私たちが推奨できるものはほとんどありません。

は、私は、データをログにどのように見えるかわからないんだけど、私は例作るよ:

2012年1月12日のログインuser_nameの成功

2012年1月12日のログインUSER_NAMEを失敗する

あなたのキーワードは成功しているかもしれません(成功したものは見たくありません)。だからあなたのwhileループでは、エントリにキーワード(成功)があるかどうかをチェックし、そうでなければ追加するだけです。

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

私の疑似コードは、私はPHPを記述していません。

+0

ありがとうございました。私はPHPコードを追加しました。私がサーバー側でフィルタリングする必要があると思うなら、PHP関数を変更するにはどうしたらいいですか? – amlane86

+0

ログファイル内のデータはどのように見えますか?何を除外していますか?キーワードをサーバーに渡して、特定のログエントリが一致した場合は、そのキーワードを含めません。 – aepheus

関連する問題