2012-01-12 2 views
1

사용자 생성자 인 키워드 배열을 가져 와서 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

h 제 이벤트 핸들러는 부모 TD 요소 당신은 또한 당신이 그렇게 할 때 키워드 배열에서 키워드를 제거 할 수 있습니다

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

을 삭제해야합니다.

로그를 필터링하는 경우 키워드 배열을 필터링 할 수있는 서버로 전달하십시오. 그러면 서버에서 반환 한 데이터 크기가 절약됩니다. 클라이언트 측에서 처리해야하는 경우 샘플 응답을 제공하여 반환 된 데이터의 구조를 나타냅니다.

0

이 도구가 계속 더 많은 결과를 얻는 것처럼 보입니다. 대역폭과 클라이언트 측로드를 줄이기 위해 서버 측에서 결과를 필터링하는 것이 좋습니다. 자바 스크립트에서 수행 할 수있는 이전 결과를 필터링 할 수도 있습니다. 데이터에 대한 정보가 조금이라도 없으면 우리가 권장 할만한 정보가 거의 없습니다.

나는 데이터가 로그에 어떻게 생겼는지 모르겠지만, 예를 들어 만들 수 있습니다 :

2012년 1월 12일 로그인 사용자 _ 성공

2012년 1월 12일 로그인 _ 이름을 실패

귀하의 키워드는 성공할 수 있습니다 (성공한 키워드가 표시되지 않음). 따라서 while 루프에서 항목에 키워드 (성공)가 있는지 확인하고 그렇지 않은 경우 추가하십시오.

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

변명 내 의사 코드, 필자는 PHP를 작성하지 않았습니다.

+0

감사합니다. PHP 코드를 추가했습니다. 서버 쪽에서 필터링해야한다고 생각하면 어떻게해야 PHP 함수를 수정할 수 있습니까? – amlane86

+0

로그 파일에서 데이터의 모양은 무엇입니까? 너는 무엇을 걸러 내고 있니? 키워드를 서버에 전달하고 주어진 로그 항목이 일치하는 경우이를 포함시키지 않을 것입니다. – aepheus

관련 문제