2014-05-12 70 views
0

我正在嘗試爲用戶填寫和搜索多個表以查找訂單,佣金等,而無需重新加載頁面。以前從未使用AJAX,因此如果任何人都可以指出我要出錯的地方,或者幫助我實現這個目標,那將非常感謝!現在,當我點擊提交按鈕時,除了獲得500(內部服務器錯誤)消息之外沒有任何反應。Laravel 4使用Ajax搜索查詢

這是我的看法(家):

<div class="large-6 columns"> 
{{Form::open(array('route' => 'search', 'method' => 'post', 'id' => 'search_form'))}}  

     {{ Form::select('search_table', 
       array(
        'select'  => 'Search...', 
        'commissions' => 'Search commissions', 
        'estimates'  => 'Search estimates', 
        'orders'  => 'Search orders', 
        'warranties' => 'Search warranties', 
     ), null, array('id' => 'search_table')) }} 

     <div class="search_box" id="search_column_div"> 
      <!-- Search_column select goes here --> 
     </div> 

     <div id="search_input_div"> 
      <!-- Search_input text field goes here --> 
     </div> 

{{ Form::submit('Search', array('id' => 'search_button','class' => 'button expand radius search_button no_display'))}} 
    {{ Form::close() }} 
    </div> 
    <div id="search_results_div"> 
    </div> 
</div> 

因爲搜索有很多變數,但我不希望把它佔用了大量的空間,我已經插入JS的下一部分該查詢基於他們以前的選擇。因此,他們將開始選擇表格進行搜索,然後選擇一列,然後他們將有一個輸入字段來編寫他們正在搜索的內容。

JS(我的問題可能是):

$(document).ready(function($){ 
    $('#search_form').on('submit', function(){ 
     $.post(
      $(this).prop('action'),{ 
       "search_table":  $('#search_table').val(), 
       "search_column": $('#search_column').val(), 
       "search_input":  $('#search_input').val(), 
      }, 
      function(data){ 
       $('#search_results_div').html(data); 
      }, 
      'json' 
     ); 
     return false; 
     }); 
}); 

控制器:

public function searchPost(){ 
     $search_table = Input::get('search_table'); 
     $search_column = Input::get('search_column'); 
     $search_input = Input::get('search_input'); 

     $search = DB::table($search_table)->where($search_column, 'LIKE', "%{$search_input}%")->get(); 
     return $search; 
    } 

和路由:

/*Search Page for Ajax*/ 
Route::post('/search', array(
    'as' => 'search', 
    'uses' => '[email protected]' 
)); 
再次

感謝您的時間和幫助!請隨時爲最佳做法提出建議!

+1

您發佈的路由正在偵聽GET請求,但是您正在發送AJAX請求。 –

+0

好點,更新了這個問題,但仍然收到500錯誤。 – mario

回答

2

呃,首先,你沒有說出問題所在,但只是看着那個代碼,你將[email protected]設置爲你的post方法的動作,但是你的搜索方法實際上是[email protected]

您也正在使用錯誤的變量。您正在通過search_table,search_columnsearch_input作爲Javascript中的鍵值,但您正嘗試讀取table_searched,column_searchedinput_searched - 因此,所有這些變量在您的服務器端代碼中始終爲空值。您的$search查詢也將始終失敗。 '%LIKE%'無效SQL - %需要繞過搜索詞。你真正想要的是:

$search = DB::table($search_table)->where($search_column, 'LIKE', "%{$search_input}%")->get(); 

嘗試修復所有這些,看看它是否與您的問題:)

+0

謝謝,爲我清理這麼多東西。我做了你指出的更正,現在當我提交頁面不會崩潰,這是一個加號,但我得到一個「500(內部服務器錯誤)」消息。我知道這通常意味着一個普遍的錯誤,即頁面無法弄清楚具體是什麼。接下來要嘗試什麼的想法? – mario

+1

當它崩潰時,Laravel應該給你一個非常詳細的堆棧跟蹤 - 你沒有得到一個詳細的錯誤是在哪裏的橙色和黑色的屏幕? – Wogan

+0

通常我會這樣做,現在沒有任何反應,當我點擊提交按鈕時,除了在Web開發人員工具中看到該錯誤消息。 – mario

1

它看起來像有幾個問題涉及。我發現你已經做了一些修改,但還有一些問題需要修復。您的AJAX請求正在使用POST請求,但您的路由正在偵聽GET請求。即使解決了這個問題,在返回結果之前,您還需要爲控制器和數據庫查詢包含某種錯誤處理或驗證。之後,你需要看看你如何處理AJAX請求返回的內容。

您遇到的500錯誤意味着您的服務器端代碼存在問題。更可能的是某些東西沒有正確「連線」。如果您在獲取詳細錯誤報告時遇到麻煩,請使用「console.log()」將通過AJAX返回的內容輸出到開發者控制檯。從那裏你可以調試問題。