2013-07-26 66 views
0

我有一個文件列表和一個下拉框,我想用戶能夠通過各種類別等的Ajax調用PDO功能在PHP類更新頁面

我有一個過濾它們PHP類,它具有創建sql查詢並返回結果的功能。我非常想通過ajax來做到這一點,以防止刷新。

我被卡住了,希望得到一些幫助。

問題是我不知道下一步該怎麼做。這對我來說很新,但仍然很多外國人。如果ajax調用可以從select中運行onKeyUp,那麼更好。

感謝您的幫助:

的HTML:

<div> 
    <form action="" method="post" name="orderBy"> 
    <label for="orderBy" id="orderBy">Order By:</label> 
    <select> 
     <option class="orderByOption" value="newest">Newest First</option> 
     <option class="orderByOption" value="oldest">Oldest First</option> 
     <option class="orderByOption" value="cat">Category</option> 
     <option class="orderByOption" value="alpha">Aphabetical</option> 
     <option class="orderByOption" value="fileType">Filetype</option> 
    </select> 
    <label> &nbsp; </label> 
    <input type="submit" class="orderByTrainingButton" name="submit" value="Go!"/> 
    </form> 
</div> 

阿賈克斯:

//form for changing the ordering of items in training all docs 
$(function(){ 
    $(".orderByTrainingButton").click(function(){ 
     //validate and process 
     //get vlaue 
     var option = $(".orderByOption").val(); 


     var params = {option: option}; 

     $.ajax({ 

      type: "POST", 
      url: "../trainingOrderByAjax.php", 
      data: params, 
      dataType: 'json', 

      success: function(data){ 

       if(data.success == true){ 
        //aaaannnd. stuck/ 
       }else{ 
        // shouldn't ge there...I hope. 

       } 

      }, 
      error: function(error) { 
       console.log(error); 
      } 
     }); 
    }); 
}); 

的PHP的AJAX會調用:

<?php 

include_once('core/init.php'); 

if($_POST){ 
    $orderBy = $_POST['orderByOption']; 

    if($training->getAlFilesOrderBy($orderBy)){ 
    $data['success'] = true; 
    }else{ 
    $data['success'] = false; 
    } 
    echo json_encode($data); 
} 

啓動用desc或asc w命令應該很棒。我可以在此基礎上進行構建。

+0

你只是路過'option'關鍵數據。你總是可以使用'$(「#myForm」)。serialize()'作爲'data'參數。 –

+0

@HalfCrazed - 我應該傳遞哪些其他數據?這就是我需要的函數參數。序列化的好處是什麼,以及如何適應? – user2608855

+0

考慮到你正在使用這個:'$ orderBy = $ _POST ['orderByOption'];'但是你沒有發佈'orderByOption' ... –

回答

0

就是這樣。

PHP:

if($results = $training->getAlFilesOrderBy($orderBy)){ 
    $data['success'] = true; 
    $data['results'] = $results; 
}else{ 
    $data['success'] = false; 
} 
echo json_encode($data); 
} 

JS:

if(data.success){ 
     var results = data.results; 
     for (var i = 0; i < results.length; i++) { 
      // do something with results[i] 
     } 
    }else{ 
     // shouldn't ge there...I hope. 
    } 

更改您的AJAX錯誤處理程序:

error: function(xhr, status, errorMsg) { 
    console.log("AJAX error: " + errorMsg); 
} 
+0

我不認爲我打電話正確的Ajax,當我檢查控制檯時似乎沒有任何事情發生。剛輸出結果[i]但沒有顯示。 – user2608855

+0

我假設'getAlFilesOrderBy()'返回結果爲一個數組。我還假定「Al」而不是「All」是故意的,而不是打字錯誤。 AJAX調用對我來說看起來不錯。 – Barmar

+0

嗨Barmar,是的,它返回fetchAll。錯別字愛我... 我剛剛修改了一下ajax,看看它到了哪裏。它沒有進入功能的成功部分。控制檯除了Object之外什麼都沒說。 $阿賈克斯({ 成功:功能(數據){ 警報( 「?我不顯示 - 承擔失敗的Ajax調用」);如果 (data.success ==真){ 警報(「我米害羞......「);} }, 錯誤:功能(錯誤){ 的console.log(錯誤);} } ) – user2608855