Как проверить форму Laravel с помощью jQuery Ajax - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь проверить форму Laravel через jQuery / Ajax.У меня есть два поля формы: «электронная почта» и «контакт».Если кто-нибудь введет адрес электронной почты и он уже зарегистрирован, на нем будет отображаться «Идентификатор электронной почты уже зарегистрирован».И так же, как в контакте.Я сделал это на PHP.Однако в представлении это не работает.

register.blade.php

<form method="POST" action="{{ route('register') }}" id="Frm_sign" name="Frm_sign">
    {{csrf_field()}}
    <div class="form-group col-md-6 col-sm-6">
        <label for="arrival">Contact No*</label>
        <input type="text" class="form-control input-sm required digits" id="contact" name="contact"
               value="{{ old('contact') }}" placeholder="">
    </div>

    <div class="form-group col-md-6 col-sm-6">
        <label for="arrival">Email id*</label>
        <input type="text" class="form-control input-sm email required" id="email" name="email"
               value="{{ old('email') }}" placeholder="">
    </div>

    <div class="col-md-12 col-sm-12">
        <div class="form-group col-md-3 col-sm-3 pull-right">
            <input type="submit" class="btn btn-primary" value="Submit" name="submit"/>
        </div>
    </div>
</form>

<!-- form validation -->
<script type="text/javascript">
    $(document).ready(function () {
// - validation
        if ($('#Frm_sign').length > 0) {
            $('#Frm_sign').validate({
                rules: {
                    email: {
                        remote: {
                            url: "{{url("varifyemail")}}",
                            type: "GET",
                            data: {
                                action: function () {
                                    return "1";
                                },
                            }
                        }
                    },
                    contact: {
                        maxlength: 10,
                        minlength: 10,
                        remote: {
                            url: "{{url("varifycontact")}}",
                            type: "GET",
                            data: {
                                action: function () {
                                    return "2";
                                },
                            }
                        }
                    },
                    password: {
                        equalTo: "#repass"
                    }
                },
                messages: {
                    email: {
                        remote: "Email id already registred"
                    },
                    contact: {
                        remote: "Mobile number already registred",
                        maxlength: "Please enter valid mobile number",
                        minlength: "Please enter valid mobile number"
                    },
                    password: {
                        equalTo: "Password is not equal"
                    }
                },

                submitHandler: function (form) {

                    form.submit();
                },
                errorPlacement: function (error, element) {
                    error.appendTo(element.parent());
                }
            });
        }
    });
</script>

В Ajax также есть пароль, но он работает, поэтому я не сталВведите здесь поле пароля.

Маршрут

Route::get('varifyemail','Auth\RegisterController@varifyemail');
Route::get('varifycontact','Auth\RegisterController@varifycontact');

RegisterController

public function varifyemail(Request $request)
{
    $email1 = User::where('email', $request->email)->get();
    if($email1->email > 0)
    {
        echo json_encode(false);
    } else {
        echo json_encode(true);
    }
}

public function varifycontact(Request $request)
{
    $contact1 = User::where('contact', $request->contact)->get();
    if($contact1->contact > 0)
    {
        echo json_encode(false);
    } else { 
        echo json_encode(true);
    }
}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018
rules: {
    email: {
        remote: {
            url: "{{url("varifyemail")}}",
            type: "get",
            data: {
/*email was the action and it will be sent as request key name*/  
            email: function() {
                    return $( "#email" ).val(); //your email field
                }
            }
        }
    }
}

В запросе varifyemail не указано значение и неправильное имя ключа действия.

И обратите внимание, в этом случае лучше использовать POST вместо GET

Пример взят из документов: jQuery Validation Remote Metode

Также перезаписать свой контактный код

0 голосов
/ 26 ноября 2018

Вы можете просто опубликовать форму с помощью ajax и получить результат с php-сервера.Поскольку ваша проверка уже работает, вам просто нужно проверить, есть ли в ответе ошибка или нет.Если есть ошибка, вы можете вывести ее на экран (например, перебирая все ошибки в ответе).

Код будет выглядеть примерно так:

$.ajax(method: "POST",
    url: "/your/endpoint",
    data: { email: "theemail", contact: "thecontact" }
})
 .done(function(res) { console.log('Success ' + res); })
 .fail(function(jqXHR, textStatus) { console.log('Validation failed ' + textStatus); });
...