2016-11-22 65 views
0

我是一名FileMaker程序員,試圖使用PHP的API將數據庫移植到網上。我有我的PHP頁面工作,檢索並顯示正確的數據從我的搜索,但是我想過濾我的網頁上的結果,每次我選擇複選框(蘋果,微軟等)沒有按下提交按鈕。我知道我需要使用ajax來執行此操作,但是我可以在下面的頁面中注入ajax,還是現在我將不得不將頁面分解爲各種小文件,php和js文件?使用ajax過濾

我發現的大多數樣本都是基於json的,它們會過濾客戶端。 FileMaker使用PHP返回奇數類型的數組,需要進一步處理才能進入json格式。我理想地尋找一種方法,只要我每次點擊複選框時發回表單,如果可能的話,我認爲這可能更簡單?

<?php require_once('../db.php'); 

if(isset($_REQUEST['search'][0])) 
{ 

$find = $fm->newCompoundFindCommand('Data'); 
$request1 = $fm->newFindRequest('Data'); 
if(isset($_REQUEST['search'][1])){ $request2 = $fm->newFindRequest('Data'); } 
if(isset($_REQUEST['search'][2])){ $request3 = $fm->newFindRequest('Data'); } 

$request1->addFindCriterion('Company',$_REQUEST['search'][0]); 
if(isset($_REQUEST['search'][1])){ $request2->addFindCriterion('Company',$_REQUEST['search'][1]); } 
if(isset($_REQUEST['search'][2])){ $request3->addFindCriterion('Company',$_REQUEST['search'][2]); } 

$find->add(1,$request1); 
if(isset($_REQUEST['search'][1])){ $find->add(2,$request2); } 
if(isset($_REQUEST['search'][2])){ $find->add(3,$request3); } 

$result = $find->execute(); 

} else { 

$request = $fm->newFindCommand('Data'); 

$request->addFindCriterion('Company','*'); 
$result = $request->execute(); 

} 


?> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title></title> 
</head> 
<body> 
<div id="filters"> 
    <form action="data_table.php" method="post"> 
     <input class="category" id="check1" name="search[]" type="checkbox" value="Apple"> 
     <label for="check1">Apple</label> 
     <input class="category" id="check2" name="search[]" type="checkbox" value="Google"> 
     <label for="check2">Google</label> 
     <input class="category" id="check3" name="search[]" type="checkbox" value="Microsoft"> 
     <label for="check3">Microsoft</label> <input type="submit" value="Submit"> 
    </form> 
</div> 
<table border="0" class="table table-striped" width="100%"> 
    <thead> 
     <tr> 
      <th>Company</th> 
     </tr> 
    </thead><?php if(!FileMaker::isError($result)) {?> 
    <tbody class="searchable"> 
     <?php foreach($result->getRecords() as $row){ ?> 
     <tr> 
      <td><?php echo $row->getField('Company'); ?></td> 
     </tr><?php } ?> 
    </tbody><?php } ?> 
</table><!-- end row --> 
</body> 
</html> 

回答

0

讓我試着打破你的代碼部分。

$request->addFindCriterion('Company','*'); 
$result = $request->execute(); 

此時您已應用查詢後的結果。只要它編碼的JSON像

echo json_encode($result); 

這是您的API端點。你會在這裏做所有的ajax查詢。將所有html內容移至單獨的文件。

現在這個代碼

<table border="0" class="table table-striped" width="100%"> 
    <thead> 
     <tr> 
      <th>Company</th> 
     </tr> 
    </thead><?php if(!FileMaker::isError($result)) {?> 
    <tbody class="searchable"> 
     <?php foreach($result->getRecords() as $row){ ?> 
     <tr> 
      <td><?php echo $row->getField('Company'); ?></td> 
     </tr><?php } ?> 
    </tbody><?php } ?> 
</table><!-- end row --> 

部分變得過時,因爲你可能已經猜到了原因顯而易見。在這個文件中沒有$result。它只是一個靜態html。你需要在這個文件中將ajax請求發送到上面我們剛剛使用的api點。您將在json中獲得響應。將它填充到表中。同樣,如果用戶有其他搜索參數,請通過適當的搜索創建一個Ajax請求,然後在javascript中重新填充表。

哪一部分比較簡單?

這完全取決於您正在構建的應用程序的類型。如果它有點沿Single Page app的行,我會建議JavaScript篩選,否則去api過濾器。

記住javascript沒有合適的sql數據庫,它們的實現是localstorage,所以執行時間可能很長,但這是人們爲持久性應用程序做出的折衷。