【发布时间】:2015-11-19 23:20:36
【问题描述】:
问题
我有一个简单的搜索字段,它是一个表单。提交时,以下代码负责获取结果。该代码给了我一个内部服务器错误。这导致我无法在控制器中输入我的 PHP 搜索功能。我认为这与我的令牌设置有关。尽管由其他人编码,但它们与其他 ajax 调用一起使用。
注意:此代码用于在我的控制台中打印搜索查询结果。由于更改(通过在主刀片中实现令牌脚本),它停止了这样做。所以我的工作流程停留在发布 ajax 调用上。您能找到导致此错误再次出现或根本出现的原因吗?提前致谢。
代码
脚本
$("#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');
主刀片中的令牌脚本(与其他 ajax 调用一起使用)
$.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'));
}
【问题讨论】:
-
你检查过 Laravel 日志和/或 HTPP 服务器日志看看有什么错误吗?
-
感谢您写出清晰的问题!几件事要尝试:1)尝试将
X-CSRF-Token更改为X-CSRF-TOKEN,因为它是区分大小写的(我不记得了)。 2)尝试将您的令牌作为_token在作为AJAX 调用中的数据传递的对象中传递。 3) 确保 AJAX 预过滤器用$(document).ready(function() { ... });包裹,以便在元素可用后设置令牌。 -
能否请您在search() 方法中注释foreach 循环代码,然后调用Ajax。我希望你能得到一些新的输出。
-
感谢您的评论!杰伊:因为我的调用不会进入函数,所以我没有得到输出。杰里米:我试过你的方法。似乎没有为我解决它,对不起。我对如何做第二个有点困惑。我已经能够将令牌转换为字符串,我可以将它添加到我的数据属性中。不知道用它做什么。 Bogdan:还没有检查服务器本身,会的!
-
我重新开始学习本教程:link。代码没有太大变化,因此不会影响以下内容:教程允许我执行 ajax 请求,但我的代码在 $projects = $query->get();现在,导致调用不成功。我收到的新错误是
Uncaught SyntaxError: Unexpected token <,同时再次收到 500 错误。此错误链接到我的文件 VM14763。好像在该文档中打印了某些内容。我在 之前看到一个 (。但没有打印/转储任何东西。