Laravel 5 `Внутренняя ошибка сервера` (500) с отправкой формы Ajax - PullRequest
0 голосов
/ 25 апреля 2018

У меня проблема с отправкой формы 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 голосов
/ 25 апреля 2018

Попробуйте

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

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

0 голосов
/ 25 апреля 2018

Проблема в том, что функция validate является предопределенным методом в контроллерах Laravel, поэтому вы переопределяете его, и это вызывает проблемы.попытайтесь изменить это на что-то другое.

0 голосов
/ 25 апреля 2018
  • Сначала отправьте форму без ajax и убедитесь, что она записывает отправленные данные, затем в своей функции ajax измените параметр "method": "POST" на "type": "POST" и попробуй еще раз.Примечание: Версии до jquery 3.0 должны быть указаны с типом или по умолчанию будет отправлено GET.

  • Во-вторых, измените метод имени «validate» на «validateSuscriber», так какКласс контроллера уже имеет метод validate, и конфликт создается двумя равными методами.

...