2017-06-15 89 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') 
    } 
});