为什么我在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,我希望有足够的信息来诊断这个问题。 如果我需要包含其他任何内容,请告诉我。
编辑:页面顶部包含的错误图片。
一切都完全一样,传递的信息包括在内
不,不是。 如果它完全相同,你就不会得到你得到的错误。
通过猜测可能出现的问题,这些问题难以解决。 你需要
-
设置系统,使Laravel的日志记录错误发送到laravel.log文件
-
设置PHP系统,以便Laravel无法处理的错误记录到您的Web服务器的错误日志(和/或PHP的错误日志)
-
将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消息。