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.phpdebug => 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 内部服务器错误

Laravel 5 App - AJAX Post请求不接受令牌并抛出500内部服务器错误

Laravel:为啥我的 ajax 请求返回“500(内部服务器错误)”?