为什么我在Laravel框架中出现此内部服务器错误?

我遇到了一种对我没有多大意义的情况。 就像一些背景信息一样,我正在使用Laravel框架。 当使用Laravel的’ – > with(’var’,$ array)’语法请求页面时,有问题的页面会调用查询。 这个查询(我将在后面发布)在页面加载时工作得非常好,并成功插入我提供的虚拟数据。

我通过使用jQuery的Ajax $ .post在单击按钮时调用相同的查询。 但是,当我执行此$ .post并调用此查询时,每次都会出现内部服务器错误。 一切都完全一样,传递的信息包括在内; 唯一的区别似乎是它是在页面加载还是通过$ .post调用。

这是错误:

在此处输入图像描述

以下是在页面加载时执行查询的代码:

routes.php将HTTP get请求发送到名为AppController.php的文件

routes.php文件 在此处输入图像描述 AppController.php 在此处输入图像描述

然后使用从DeviceCheckoutController.php获取的以下数组DeviceCheckoutController.php

在此处输入图像描述

然后转到DeviceCheckout.php

在此处输入图像描述

我能够在页面上回显$ test,并且每次重新加载页面时都返回一个新行的ID(这显然意味着’insertGetId’查询有效)。 但是,我将此查询挂钩到页面加载以进行测试。 我真正想要发生的是点击一个按钮。 这是代码:

 $("#checkoutFormbox").on('click', '#checkoutButton', function() { var checkoutInformation = Object(); var accessories = []; var counter = 0; var deviceName = checkoutDeviceTable.cell(0, 0).data(); $(".accessoryCheckbox").each(function() { //add accessory ID's to this list of only accessories selected to be checked out if($(this).val() == "1") { accessories[counter] = $(this).data('id') + " "; } counter++; }); checkoutInformation['deviceID'] = $(".removeButton").val(); //deviceID was previously stored in the remove button's value when the add button was clicked checkoutInformation['outBy'] = ''; checkoutInformation['outNotes'] = $("#checkOutDeviceNotes").val(); checkoutInformation['idOfAccessories'] = 2; checkoutInformation['dueDate'] = $("#dueDate").val(); if($("#studentIdButton").hasClass('active')) { checkoutInformation['renterID'] = 0; checkoutInformation['emplid'] = 1778884; console.log(checkoutInformation); $.post("http://xxx.xxx.xxx.xxx/testing/public/apps/devicecheckout-checkoutdevices", {type: "checkoutDeviceForStudent", checkoutInformation: checkoutInformation}, function(returnedData) { alert(returnedData); }); } }); 

然后将其路由到AppController.php ,特别是路由到switch语句的’checkoutDeviceForStudent’部分:

在此处输入图像描述

然后回到之前在DeviceCheckout.php显示的查询

最后,这是我的DB结构供参考:

在此处输入图像描述

关于为什么会发生这种情况的任何解释? 此外,任何Laravel或其他一般最佳实践提示将非常感激,因为我没有经验使用此框架和整体编程。

很抱歉这么长的post,我希望有足够的信息来诊断这个问题。 如果我需要包含其他任何内容,请告诉我。

编辑:页面顶部包含的错误图片。

一切都完全一样,传递的信息包括在内

不,不是。 如果它完全相同,你就不会得到你得到的错误。

通过猜测可能出现的问题,这些问题难以解决。 你需要

  1. 设置系统,使Laravel的日志记录错误发送到laravel.log文件

  2. 设置PHP系统,以便Laravel无法处理的错误记录到您的Web服务器的错误日志(和/或PHP的错误日志)

  3. 将Laravel置于调试模式,以便在屏幕上输出错误,并通过Firebug或Chrome查看ajax请求的输出

一旦你有了实际的PHP错误,通常很容易看出你认为相同的请求有什么不同,并解决问题。

在得到朋友的一些建议后,我找到了解决问题的方法; 比我预期的要容易得多,比在这里或其他地方提供给我的任何解决方案都容易得多。

基本上,我需要做的是在我的模型函数中放置一个try,catch子句,然后如果遇到exception,我将它存储在变量中, return它,并使用console.log()来查看exception。 这是一个模仿我的观点的例子:

 public function getUserFullname($userID) { try { $myResult = DB::connection('myDatabase')->table('TheCoolestTable')->select('fullName')->where('userID', '=', $userID)->get(); return $myResult; } catch(Exception $e) { $errorMessage = 'Caught exception: ' . $e->getMessage(); return $errorMessage; } } 

然后在View上(或模型函数返回的任何地方),只需控制console.log() POST的输出。 这将显示成功查询的结果,或者如果遇到一个,则显示exception的结果,而不是无用的内部服务器错误500消息。