Php Laravel-CSRF令牌不能与ajax调用一起使用,导致500内部服务器错误 问题
我有一个简单的搜索字段,它是一个表单。提交时,以下代码负责获得结果。代码给了我一个内部服务器错误。这导致我没有在控制器中输入PHP搜索函数。我认为这与我的代币设置有关。它们可以处理其他ajax调用,尽管是由其他人编写的 注意:此代码用于在我的控制台中打印搜索查询结果。由于更改(通过在主刀片中实现令牌脚本),它停止了这样做。因此,我的工作流程在发布ajax调用时陷入了困境。您能找到导致此错误再次出现或出现的原因吗?提前谢谢 代码 剧本 路线 主刀片中的令牌脚本(与其他ajax调用一起使用) 搜索功能Php Laravel-CSRF令牌不能与ajax调用一起使用,导致500内部服务器错误 问题,php,ajax,laravel,Php,Ajax,Laravel,我有一个简单的搜索字段,它是一个表单。提交时,以下代码负责获得结果。代码给了我一个内部服务器错误。这导致我没有在控制器中输入PHP搜索函数。我认为这与我的代币设置有关。它们可以处理其他ajax调用,尽管是由其他人编写的 注意:此代码用于在我的控制台中打印搜索查询结果。由于更改(通过在主刀片中实现令牌脚本),它停止了这样做。因此,我的工作流程在发布ajax调用时陷入了困境。您能找到导致此错误再次出现或出现的原因吗?提前谢谢 代码 剧本 路线 主刀片中的令牌脚本(与其他ajax调用一起使用) 搜索功
通过遵循此[教程]()获得了一个结果。不确定最初的问题是什么 通过遵循此[教程]()获得了一个结果。不确定最初的问题是什么 您是否检查了Laravel日志和/或HTPP服务器日志以了解错误所在?感谢您写了一个明确的问题!尝试以下几点:1)尝试将
X-CSRF-Token
更改为X-CSRF-Token
,因为它可能区分大小写(我不记得了)。2) 在AJAX调用中作为数据传递的对象中,尝试将令牌作为\u token
传递。3) 确保AJAX预过滤器用$(document.ready(function(){…})包装
所以标记是在元素可用后设置的。请在search()方法中对foreach循环代码进行注释,然后调用Ajax。我希望你会得到一些新的输出。谢谢评论!杰伊:因为我的呼叫无法进入函数,所以我没有得到输出。杰里米:我试过你的方法。好像没帮我修好,对不起。我对如何做第二个有点困惑。我已经能够将令牌转换成字符串,我可以将它添加到我的数据属性中。我不知道该怎么办。博格丹:还没有检查服务器本身,就可以了!我已经从本教程重新开始:。代码没有太大变化,因此不会影响以下内容:教程允许我执行ajax请求,但我的代码在$projects=$query->get()处崩溃;现在,导致呼叫失败。我收到的新错误是Uncaught SyntaxError:Unexpected token您是否检查了Laravel日志和/或HTPP服务器日志以查看错误是什么?感谢您编写了一个清晰的问题!尝试以下几点:1)尝试将X-CSRF-Token
更改为X-CSRF-Token
,因为它可能区分大小写(我不记得了)。2) 在AJAX调用中作为数据传递的对象中,尝试将令牌作为\u token
传递。3) 确保AJAX预过滤器用$(document.ready(function(){…})包装
所以标记是在元素可用后设置的。请在search()方法中对foreach循环代码进行注释,然后调用Ajax。我希望你会得到一些新的输出。谢谢评论!杰伊:因为我的呼叫无法进入函数,所以我没有得到输出。杰里米:我试过你的方法。好像没帮我修好,对不起。我对如何做第二个有点困惑。我已经能够将令牌转换成字符串,我可以将它添加到我的数据属性中。我不知道该怎么办。博格丹:还没有检查服务器本身,就可以了!我已经从本教程重新开始:。代码没有太大变化,因此不会影响以下内容:教程允许我执行ajax请求,但我的代码在$projects=$query->get()处崩溃;现在,导致呼叫失败。我收到的新错误是Uncaught SyntaxError:Unexpected token
$("#searchonfrontpage").submit(function(e){
e.preventDefault();
var whattosearch = $("#searchFRONT").val();
console.log("searching... " + whattosearch + ".");
$.ajax({
type: "POST",
url: "/",
data: { whattosearch: whattosearch },
success : function(data){
console.log(data);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
});
//just in case
Route::filter('csrf', function() {
$token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');
if (Session::token() != $token)
throw new Illuminate\Session\TokenMismatchException;
});
//frontpage routes
Route::get('/','frontpageController@frontpage');
Route::post('/', 'frontpageController@search');
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
public function search() {
//not making it here because of the 500 server error with post
print_r("call made");
$q = $_POST["whattosearch"];
print_r($q);
$searchTerms = explode(' ', $q);
$query = DB::table('projects');
foreach($searchTerms as $term){
$query->join('users', 'users.id', '=', 'projects.user_id')
->where('title', 'LIKE', '%'. $term .'%')
->orWhere('tags', 'LIKE', '%'. $term .'%')
->orWhere('body', 'LIKE', '%'. $term .'%')
->orWhere('username', 'LIKE', '%'. $term .'%')
->orderBy('created_at', 'desc');
}
$projects = $query->get();
print_r($projects); //used to be able to see these results, but not anymore
//return data view here (also gives a 500 error when I used to be able to get projects)
//return View::make( 'viewfile' )->with( 'data', $projects );
//return View::make('projects', compact('projects'));
}