【问题标题】:Laravel 500 Internal Server Error AjaxLaravel 500 内部服务器错误 Ajax
【发布时间】:2018-02-23 11:56:43
【问题描述】:

我正在使用 Laravel 和 Ajax 开发一个网站。当我尝试使用 hasMany 方法返回属于特定用户(用户模型)的所有消息(消息模型)时遇到问题。

web.php

Route::get('/test', 'UserController@testFunction');
Route::post('/test', 'UserController@testFunction');

UserController.php

public function testFunction(Request $request) {
    if ($request->isMethod('post')) {
        $messages = User::find(1)->messages;
        return $messages;
    } else {
        return 'get method';
    }
}

用户模型

class User extends Authenticatable {
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function messages() {
        $this->hasMany('App\Message', 'from');
    }
}

消息模型

class Message extends Model {
    protected $fillable = [
        'from', 'to', 'content'];
}

然后我有两个按钮(仅用于测试 - POST 和 GET)。它们由这个 JavaScript 代码

处理
window.onload = function() {
    // AJAX Setup
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    // Post Method
    $('#postMethod').click( function() {
        $.post('test', function (data) {
            console.log(data);
        });
    });

    // Get Method
    $('#getMethod').click(function() {
        $.get('test', function(data) {
            console.log(data);
        });
    });
}

数据库中的表结构如下:

当我点击 POST 按钮(由上面的 javascript 代码处理)时,我在控制台中收到此错误:error in console

如果我将$messages = User::find(1)->messages;更改为$messages = User::find(1)->name;,例如,我将ID为1的用户的名称正常返回到控制台。

我认为 UserController.php 中的 messages() 函数有问题。也许'来自'作为外键?这只是我的猜测,可能错误出在其他地方,请自行查看。

【问题讨论】:

  • 我猜你也必须将令牌作为参数传递
  • 你的意思是<meta name="csrf-token" content="{{ csrf_token() }}">?我在 app.blade.php 模板的 head 标签中有它。
  • 查看网络选项卡以获取更多信息或查看 laravel.log 文件以获取有关错误的更多信息
  • 不,不是在标题中,而是在这样的正文中,数据:{ _token: $('#signup-token').val()} ...
  • 是的,正如@linktoahref 所说,检查日志以获取更多信息

标签: javascript php laravel


【解决方案1】:

这是您的解决方法,您需要调用类似 messages() 这样的消息,这将返回关系实例。

public function testFunction(Request $request) {
if ($request->isMethod('post')) {
    $messages = User::find(1)->messages();
    return $messages;
} else {
    return 'get method';
}
}

希望这会有所帮助。

【讨论】:

  • 谢谢!这解决了错误 - 它不再存在。但问题是我没有得到任何数据,即使它应该返回一条消息。这是我的消息表数据:link。如您所见,我有一条属于 ID 为 1 的用户的消息,但它没有返回到控制台。我的public function messages()写对了吗,尤其是第二个参数?
  • 试试这个$messages = User::find(1)->messages()->get();
  • 如果我添加get() 方法,我会再次得到POST 500 (Internal Server Error) 错误。
  • 好的,你也可以这样做User::where('id',1)->with('messages')->get();,如果可行,请告诉我。
  • 不,它再次给出POST 500 (Internal Server Error) 错误。 with('messages') 部分正确吗?
【解决方案2】:

使用/ 进行测试。 试试这个

// Post Method
    $('#postMethod').click( function() {
        $.post('/test', function (data) {
            console.log(data);
        });
    });

    // Get Method
    $('#getMethod').click(function() {
        $.get('/test', function(data) {
            console.log(data);
        });
    });

【讨论】:

  • 如果我这样做,单击按钮后,我会在控制台中收到错误404 (Not Found)
  • @brainstorm 您的应用程序可用//public
  • @brainstorm 从 URL 中删除公共 - stackoverflow.com/questions/28364496/…
猜你喜欢
  • 2017-04-12
  • 2020-02-12
  • 2018-04-16
  • 2016-03-24
  • 2019-05-12
  • 2015-09-20
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多