2012-01-12 142 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數組中,然後使用keywords數組篩選來自JSON對象的data.log,然後將其附加到屏幕上。

我也有一個不起作用的刪除過濾器功能。也許有人可以幫助我。

回答

0

delete事件處理程序會刪除父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 2012-01-12 19:53:51

+0

數據在日誌文件中看起來像什麼?你過濾了什麼?您希望將關鍵字傳遞給服務器,並且如果給定的日誌條目與它們匹配,則不會包含它。 – aepheus 2012-01-12 21:44:05