Laravel ajax 帖子返回 500 内部服务器错误
Posted
技术标签:
【中文标题】Laravel ajax 帖子返回 500 内部服务器错误【英文标题】:Laravel ajax post returns 500 Internal Server Error 【发布时间】:2016-08-20 02:27:22 【问题描述】:从文本框中的下拉列表中选择一个值后,我想通过 AJAX 请求加载一些数据。但是,从下拉列表中选择后,它会显示 500 (Internal Server Error)
。我该如何解决?
这是我的 AJAX 代码:
$('#teacher').on('change',function(e)
var tech_id = $('#teacher option:selected').attr('value');
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
$.ajax(
type: "POST",
url: "url('ajaxteach')",
data:
tech_id: tech_id
,
success: function(data)
var json_obj = jQuery.parseJSON(data);
$('#credit_taken').val(json_obj.credit_taken);
$('#remaining_credit').val(json_obj.remaining_credit);
);
);
这是我的控制器
public function get_teach(Request $request)
$tech_id = $request::input(['tech_id']);
$teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();
return Response::json($teachers);
路线如下:
Route::post('ajaxteach', [
'uses' => 'CourseController@get_teach',
'as' => 'ajaxteach',
]);
【问题讨论】:
检查网络响应,看看错误在说什么? 这是发布控制器文件的一种方式吗? 【参考方案1】:在 jquery ajax 调用你通过
teach_id: teach_id
控制器看tech_id
你也忘了query()
,正确的应该是
$tech_id = $request::input(['teach_id']);
$teachers= \App\Teacher::query()->where('teacher_id','=',$teach_id)->get();
【讨论】:
抱歉错字.. 仍然得到同样的错误! 我已经添加了查询(),但没有任何改变,仍然得到同样的错误。【参考方案2】:你不应该这样做:
$request::input(['tech_id']);
你有一个对象,所以你不应该以静态方式获取它的非静态方法。您可以在$request
对象上使用get()
方法:
$request->get('tech_id');
所以整个控制器方法是:
public function get_teach(Request $request)
$tech_id = $request->get('tech_id');
$teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();
return Response::json($teachers);
【讨论】:
如果你得到 500 并且你在开发环境中,你可以检查 ajax 的响应(来自服务器),例如在 Chrome 中按 F12 并重新运行页面。然后进入 chrome 开发工具上的网络选项卡,找到文件的请求(它是红色的)。单击它并检查响应消息。 谢谢兄弟,您的解决方案可能没有准确地给出我的问题答案,但我有机会知道如何检查响应并找到错误。我解决了这个问题。【参考方案3】:试试这个,您的原始函数中有几个看起来像是潜在问题的位。否则,您需要发布错误的详细信息。
public function get_teach(Request $request)
$tech_id = $request -> tech_id;
$teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();
return response() -> json($teachers);
【讨论】:
【参考方案4】:您可以随时查看 laravel.log (storage/logs/laravel.log)。
默认情况下,laravel 使用 'id' 作为主键。 如果你不使用它,你应该在你的 App\Teacher 模型上设置:
class Teacher extends Eloquent
protected $primaryKey = 'teacher_id';
所以你可以在你的控制器中使用:
$teachers= \App\Teacher::find($tech_id);
【讨论】:
【参考方案5】:我最近一直在研究这个问题。您已将标头“X-CSRF-TOKEN”添加到您的 ajax 请求中,如您的代码所示:
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
但如果您忘记将以下代码添加到页面标题,它的值可能为空。尝试将其添加到您的 head 标签中:
<meta name="csrf-token" content=" csrf_token() " />
这可能会奏效。
【讨论】:
以上是关于Laravel ajax 帖子返回 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
laravel 中的 Ajax 发布返回错误 500(内部服务器错误)
Laravel 5.2 ajax 返回 500 内部服务器错误
在 laravel 5.2 中使用 jquery 和 ajax 出现 500 内部服务器错误