POST 500(内部服务器错误) - Ajax 和 laravel 4
Posted
技术标签:
【中文标题】POST 500(内部服务器错误) - Ajax 和 laravel 4【英文标题】:POST 500 (Internal Server Error) - Ajax & laravel 4 【发布时间】:2016-04-08 15:25:30 【问题描述】:对不起,如果我的解释不好。无论如何,我去年某个时候使用 laravel 4 制作了这个待办事项列表。在过去的几个月里一直工作得很好,我不再玩它了。不知何故,我昨天还在玩它,现在它给了我这个 POST 500(内部服务器错误)。 Ajax 调用之前运行良好。昨晚我在使用 chrome 时遇到了这个错误,今天我尝试使用 firefox,不知何故它起作用了,但几分钟后,我在 firefox 中也遇到了同样的错误。顺便说一下,这里使用了一些 ajax 调用。添加项目使用 ajax 发布通过完成按钮添加的内容(此 ajax 运行良好)。单击完成按钮时,它应该成为一个删除按钮,这是给我错误的 ajax。我去了app.php
转debug => true
显示此错误消息
"error":"type":"ErrorException","message":"Creating default object from empty value","file":"\/home2
\/.........\/TodoController.php","line":174
在我的第 174 行中,我有 $query->done = 1;
那行在这个函数里面
public function doubleDQuery($table, $id, $todoText, $done, $action)
$query = $table::where('id', '=', $id)->where('todoText', '=', $todoText)
->where('done', '=', $done)->first();
if($action == 'done')
$query->done = 1;
$query->touch();
$query->save();
if($action == 'delete')
$query->delete();
如果我注释掉了$query->done = 1
,它会给我一个错误到下一行
"error":"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to a member
function touch() on a non-object","file":"\/home2\......\/TodoController
.php","line":175
如果我评论了上面的行,它会给我none-object to save()的错误。
过去几个月没有进行任何修改,如上所述,它在 Firefox 中工作了大约一分钟。我只是不知道应该从哪里开始寻找答案,有人可以帮我从哪里开始寻找吗?
我已经读到,由于 500 是内部服务器错误,它可能是服务器而不是我的代码,但奇怪的是同一应用程序中的其他 ajax 调用正常工作,这让我很头疼。
【问题讨论】:
【参考方案1】:这只是意味着$query
不是你想象的那样。
它似乎是null
,这意味着数据库中没有与您的 where 子句匹配的条目。尽管您期望它,但分别要求它是一个对象以及您的模型类的一个实例,此代码才能正常工作,而不会引发异常。
所以您可以手动检查null
并做任何您不喜欢的事情:
if($query === null)
//No matching row found
或者使用firstOrFail()
而不是first()
,它实际上已经抛出了一个带有404 状态码的异常,这可能是你想要的,因为你可能想在客户端正确处理它。
【讨论】:
谢谢,我稍后会试一试,但可能是什么导致了这种情况,因为代码/数据库中没有任何更改,一旦我收到错误,刷新页面将显示更改实际上已进行错误。 在您发布的代码中找不到任何其他内容。我能想象的唯一符合您描述的事情是您以某种方式执行了两次 ajax 调用。第一个进行更改,第二个失败,因为done
在数据库中已更改。
嗯,我刚刚尝试在 $query 变量之后使用vardump($query)
来查看返回的内容,它实际上返回了数据库中的对象,它会很长一段时间看,但它是一些东西像这样["original":protected]=> array(7) ["id"]=> string(2) "50" ["userID"]=> string(1) "0" ["todoText"]=> string(1) "3" ["done"]=>
但错误仍然存在,这意味着它不是 null 不是吗?
根据你的建议,我实际上用 if($query) 包装了检查完成/删除的 if 函数,它现在可以工作了。这是非常愚蠢的,并且没有足够的经验来检查它是否为空,但如上所述,这很奇怪。当我var_dump($query)
根本不为空时,这可能是什么原因? (我知道这很难说,但只是不想得到更多的想法)
正如我所说,鉴于我对您的代码的了解,我只能想象它以某种方式执行了两次。第一个有效,第二个失败。如果你的代码因为条目是null
而失败,它肯定不会更新它。以上是关于POST 500(内部服务器错误) - Ajax 和 laravel 4的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5:Ajax Post 500(内部服务器错误)
ajax post 返回 laravel 错误 500(内部服务器错误)
Laravel/Ajax POST 500 内部服务器错误可能的原因
出现错误:使用 AJAX POST 到 C# Web 方法时出现 500 内部服务器错误