2017-06-15 93 views
0

我正在進行實時搜索,用戶可以在其中搜索業務。Laravel live ajax搜索 - 令牌不匹配

這將使用ajax並顯示結果,但我得到一個錯誤,有一個TokenMismatchException。

這裏是我的代碼:

阿賈克斯:

function search_data(search_value) { 
    $.ajax({ 
     url: '/searching/' + search_value, 
     method: 'POST', 
     headers: { 
     'X-CSRFToken': $('meta[name="token"]').attr('content') 
    } 
    }).done(function(response){ 
     $('#results').html(response);   // put the returning html in the 'results' div 
    }); 
} 

控制器:

public function search($search) { 
    $search_text = $search; 
    if ($search_text==NULL) { 
     $data= Business::all(); 
    } else { 
     $data=Business::where('name','LIKE', '%'.$search_text.'%')->get(); 
    } 
    return view('results')->with('results',$data); 
} 
} 

路線::

Route::get('/', function() { 
    return view('auth/login'); 
}); 
Route::group(['middleware' => ['auth']], function() { 
    Route::get('tfgm', '[email protected]')->name('tfgm');; 
    Route::get('odeon', '[email protected]')->name('odeon');; 
    Route::get('chronicle', '[email protected]_chronicle')->name('chronicle');; 
    Route::get('smokeyard', '[email protected]')->name('smokeyard');; 
    Route::get('profile/', '[email protected]')->name('profile');; 
    Route::get('create/business', '[email protected]')->name('createBusiness'); 
    Route::get('business/list', '[email protected]')->name('viewBusiness'); 
    Route::get('business/{id}', '[email protected]')->name('displayBusiness'); 

    Route::post('/searching/{search}', '[email protected]'); 
    Route::post('update', '[email protected]'); 
    Route::post('create', '[email protected]');  
    Route::post('image', '[email protected]'); 
    Route::post('test2', '[email protected]'); 
    Route::post('markers', '[email protected]'); 
    Route::post('reviews', '[email protected]'); 
}); 
Auth::routes(); 

Route::get('/home', '[email protected]')->name('home'); 

Route::get('/redirect/{provider}', '[email protected]'); 
Route::get('/callback/{provider}', '[email protected]'); 

master.blade.php

<head> 
<meta name="csrf-token" content="{{ csrf_token() }}" /> 
</head> 
         <form action="/search" method="get" autocomplete="off" class="navbar-form navbar-left"> 
          <div class="form-group"> 
           <input type="text" class="form-control" id="search_text" onkeyup="search_data(this.value, 'result');" placeholder="Search"> 
          </div> 
           <div id="result"> 
            @include('results') 
           </div> 
          </div> 
         </form> 
+0

你是否應用正確中間件的路線? VerifyCsrfToken,EncryptCookies等? – btl

+0

我想我是這樣做的,你可以通過查看我編輯過的帖子 – Przemek

+0

''X-CSRFToken'來確認:$('meta [name =「token」]')。attr('content')'你的名字不匹配與元標記。您已在元標記中編寫了'csrf-token'。 – Ganesh

回答

3

你行必須

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
0

更改X-CSRFToken到X-CSRF-TOKEN

2

在你的Ajax代碼你寫X-CSRFToken這是錯誤的。正確的是X-CSRF-TOKEN

在你的腳本文件一律使用以下代碼

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
});