我将项目转移到Laravel 5.我在导航栏中有一个实时搜索功能,可在您键入时列出数据库中的现有名称。
当我输入一个字母时,会调用Ajax中的url,但是在网络检查中会出现500错误。
任何人都知道解决方案吗?
搜索输入:
<script type="text/javascript">
$(function () {
$(".search_keyword").keyup(function () {
var search_keyword_value = $(this).val();
var dataString = 'search_keyword=' + search_keyword_value;
if (search_keyword_value != '') {
$.ajax({
type: "POST",
url: "/searching",
data: dataString,
cache: false,
success: function (html) {
$("#result").html(html).show();
}
});
}
return false;
});
$("#result").live("click", function (e) {
var $clicked = $(e.target);
if (e.target.nodeName == "STRONG")
$clicked = $(e.target).parent().parent();
else if (e.target.nodeName == "SPAN")
$clicked = $(e.target).parent();
var $name = $clicked.find('.name').html();
var decoded = $("<div/>").html($name).text();
$('#search_keyword_id').val(decoded);
});
$(document).live("click", function (e) {
var $clicked = $(e.target);
if (!$clicked.hasClass("search_keyword")) {
$("#result").fadeOut();
}
});
$('#search_keyword_id').click(function () {
$("#result").fadeIn();
});
});
JS脚本
Route::post('/searching', 'SearchController@index');
路由:
class SearchController extends Controller
{
public function index()
{
$search_keyword = $_POST['search_keyword'];
$first_query = DB::table('ftse100')->select('name', 'symbol')->
where('symbol', 'like', '%' . $search_keyword . '%')->orWhere('name', 'like', '%' . $search_keyword . '%');
$query = DB::table('ftse250')->select('name', 'symbol')->
where('symbol', 'like', '%' . $search_keyword . '%')->orWhere('name', 'like', '%' . $search_keyword . '%')
->union($first_query)->get();
$bold_search_keyword = '<strong>' . $search_keyword . '</strong>';
if ($query) {
foreach ($query as $rows) {
echo '<div class="show" align="left"><span class="name">' . str_ireplace
($search_keyword, $bold_search_keyword, $rows['name']) . '</span></div>';
}
} else {
echo '<div class="show" align="left">No matching records.</div>';
}
}
搜索控制器内的索引功能:
SELECT CASE WHEN t.ItemType = 'MD5' THEN 'NAM' ELSE t.country END as [Country],
t.itemType
FROM YourTable t
答案 0 :(得分:0)
您必须在请求中传递crsf令牌,因此请参阅手册:
您必须设置元标记:
<meta name="csrf-token" content="{{ csrf_token() }}" />
在你的js:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
答案 1 :(得分:0)
500错误意味着您遇到服务器问题,因为您的路由看起来很简单,这表明它在您的控制器中。
您可以通过启用调试https://laravel.com/docs/5.2/errors#configuration
从应用中获取更多信息错误可能是SearchController @ index是回显内容,而不是返回它(或更好的视图)。
Laravels响应类会在您的控制器(例如设置Cookie和标头)之后做很多繁重的工作,如果内容已经发送,可能会导致错误。
由于您的html相当简单,我建议将其移至视图并将数据传递到该视图。
当然,正如Joaquin Javi所说,使用csrf-token。