Пустая страница с результатом json после отправки формы с помощью ajax

-1

Я пытаюсь использовать ajax для входа в мое веб-приложение, но когда я отправляю форму для входа, я получаю пустую страницу с ответами json, например, при успешном входе в систему я получаю:

{"success":true}

При неправильных учетных данных я получаю:

{"fail":true,"errors":"Email or password is incorrect"}

И по неправильной электронной почте или паролю я получаю (ошибка проверки):

{"fail":true,"errors":{"email":["The email field is required."],"password":["The password field is required."]}}

Мой файл js содержит этот фрагмент кода:

$('#loginForm').submit('click',function(e){
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    })

e.preventDefault();

var formData = $(this).serialize();

$.ajax({
    type: "POST",
    url: $(this).attr("action"),
    dataType: 'json',
    data: formData,
    success: function (data) {
        window.location.replace("localhost:8000");
    },
    error: function (data) {
        $.each(data.errors, function(index,value) {
            var errorDiv = '#'+index+'_error';
            $(errorDiv).html(value);
        });
    }
});
});

В моем контроллере у меня есть функция входа:

public function login(Request $request){
        try{
            $validate = Validator::make($request->all(),[
                'email' => 'required|max:320',
                'password' => 'required|max:150',
                'remember_me' => 'nullable|accepted'
            ]);

        if($validate->fails()){
            return response()->json(array(
                'fail' => true,
                'errors' => $validate->getMessageBag()->toArray()
            ));
        }

        $rememberMe = $request->remember_me ? true : false;

        if(Sentinel::authenticate(['username'=>$request->email, 'password' => $request->password], $rememberMe)){
            return response()->json(array(
                'success' => true
            ));
        }
        elseif(Sentinel::authenticate(['email'=>$request->email, 'password' => $request->password], $rememberMe)){
            return response()->json(array(
                'success' => true
            ));
        }
        else{
            return response()->json(array(
                'fail' => true,
                'errors' => 'Email or password is incorrect'
            ));
        }
    }
    catch(ThrottlingException $e) {
        $delay = $e->getDelay();

        return redirect('/')->with('error',"After too many login attempts\n you've banned for $delay seconds!");
    }
    catch(NotActivatedException $e) {
        return redirect('/')->with('error','Your account is not activated!');
    }
    catch(Exception $e){
        return redirect('/')->with('error',$e->getMessage());
    }
}

Форма:

{{ FORM::open(['url' => 'loginua','id'=>'loginForm']) }}
<div class="input-container">
    {{ FORM::text('email', null, ['placeholder' => 'E-mail or Username','id'=>'email', 'autofocus' => 'autofocus','required' => 'required']) }}
    <i class="fa fa-envelope-o"></i>
    <div id="#email_error"></div>
</div>
<div class="input-container">
    {{ FORM::password('password', ['placeholder' => 'Password','id' => 'password', 'required' => 'required']) }}
    <i class="fa fa-unlock"></i>
    <div id="#email_error"></div>
</div>
<div class="input-container">
    <label>
        <span class="radio">
            {{ FORM::checkbox('remember_me')}}
            <span class="radio-value" aria-hidden="true"></span>
        </span>
        <span>Remember me</span>
    </label>
</div>
<div class="input-container">
    {{ FORM::submit('Sign in',['class' => 'btn-style', 'name' => 'sign_in','id'=>'sign_in']) }}
</div>
<div class="user-box-footer">
    <p>Dont have account?<br><a href="{{url('register')}}">Sign up as User</a></p>
    <p><a href="{{url('recovery')}}">Lost password?</a></p>
    <p id="0_error"></p>
</div>
{{ FORM::close() }}

Маршрут:

Route::post('loginua', 'PagesController@login');

Я не знаю, почему jquery на успех или неудача не срабатывает. Заранее спасибо!

  • 0
    пожалуйста, добавьте ваши маршруты.
Теги:

2 ответа

0
Лучший ответ

Проблема заключалась в метатеге в файле вида, мне пришлось добавить эту строку кода в соответствие с ajaxSetup:

<meta name="csrf-token" content="{{csrf_token()}}"/>

Спасибо всем за советы.

0

использование

$('#loginForm').on('submit',function(e){

вместо

$('#loginForm').submit('click',function(e){
  • 0
    Без изменений, тот же результат.
  • 0
    используйте url: '/ loginua' в вызове ajax и удалите 'url' => 'loginua' из Form :: open ()
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню