使用Ajax表单提交的Laravel 5“内部服务器错误”(500)

时间:2018-04-25 03:00:57

标签: php ajax laravel-5 http-status-code-500

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

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

我已尝试在其他帖子和网站上找到许多没有运气的建议。这是我的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!') );
            }

        }       
    }
}

我会在self::executeInsertQuery(...)内发布代码,但考虑到subscribe路由似乎没有达到validate方法,我认为不相关。

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

  • 首先,发送没有ajax的表单并验证它是否记录了发送的数据,然后,在其ajax函数中,更改参数"方法":" POST"到"键入":" POST"然后再试一次。注意:jquery 3.0之前的版本需要用类型表示,或者默认发送GET。

  • 其次,更改名称方法"验证" to" validateSuscriber",因为Controller类已经有一个"验证"方法和冲突是通过两个相同的方法创建的。

答案 2 :(得分:2)

尝试

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

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