Laravel 5 `内部服务器错误` (500) Ajax 表单提交

Laravel 5 `Internal Server Error` (500) with Ajax form submission

我在 Laravel 5 项目中提交 ajax 表单时遇到问题。我的浏览器控制台出现以下错误:

 Failed to load resource: the server responded with a status of 500 (Internal Server Error)

我尝试了很多在其他 post 和网站上找到的建议,但都没有成功。这是我的 Ajax:

$.ajax({'url': './subscribe' 
    ,'data' : {
                "_token": $('meta[name="csrf-token"]').attr('content')
                ,"email" : $('#subscribe-email-input').val() 
            }
    ,'method': 'POST' 
    ,'success': function(data){
        console.log( data );
    }
    ,'error': function(data){
        console.log( 'oops', data );
    }
});

我的 routes/web.php 文件中定义了以下路由:

Route::post('subscribe', ['uses' => 'SubscribeController@validate', 'as' => 'subscribe.route']);

而且控制器非常简单:

class SubscribeController extends Controller
{   
    /*
    *   Get email address from DB if exists
    *
    *   @param string email, email address to search and return data from DB
    *
    *   @returns $email
    */
    public function validate ( Request $request )
    {
        $email = addslashes($request->email) ;

        if ( $email ) 
        {           
            $email = \App\Subscribe::where('email', '=', $email)->get();

            if ( $email->isEmpty() ) 
            {
                self::executeInsertQuery ( $email );
                return json_encode( array('body' => 'You have subscribed!') );
            } else {
                return json_encode( array('body' => 'You are already subscribed!') );
            }

        }       
    }
}

我会 post self::executeInsertQuery(...) 中的代码,但考虑到 subscribe 路线似乎甚至没有到达 validate,我认为它不相关]方法。

任何关于如何解决问题的建议或意见将不胜感激!!提前致谢!

  • 首先发送不带ajax的表单,验证是否记录了发送的数据,然后在其ajax函数中,修改参数"method": "POST" 到 "type": "POST" 然后重试。注意:jquery 3.0之前的版本需要指明类型,否则默认发送GET。

  • 其次,将名称method"validate"改为"validateSuscriber",因为Controllerclass已经有一个"validate"方法,造成冲突通过两种相同的方法。

尝试

return response()->json([
    'body' => 'You have subscribed!'
]);

https://laravel.com/docs/5.6/responses#other-response-types

问题是 validate 函数是 Laravel 控制器中的预定义方法,因此您覆盖它并导致问题。尝试将其更改为其他内容。