通过AJAX路由

我有一个ajax请求处理表单字段的验证(登录注册忘记密码) . 在它的成功场景中,我希望它路由到另一个页面,但是当我使用 Redirect::route('name'); 作为从控制器的返回时,它用200完成请求并生成另一个GET请求,该请求仅返回html作为响应并且不路由到其他页面 .

AJAX

$('form[data-remote]').on('submit', function (e) {
    var form = $(this);
    var method = form.find('input[name="_method"]').val() || 'POST';
    var url = form.prop('action');
    $.ajax({
        type: method,
        url: url,
        data: form.serialize(),
        beforeSend: function () {
            $('#ajax-loading').show();
            $(".has-error").text("");
            $('#login-error').addClass('display-hide');
            $('#forget-user-error').addClass('display-hide');
        }
    })
        .done(function (data) {
            if (data.signup_fail) {
                $.each(data.errors, function (index, value) {
                    var errorSpan = '#' + index + '_error';
                    $(errorSpan).removeClass('hidden');
                    $(errorSpan).empty().append(value);
                });
                $('#successMessage').empty();
            }
            else if (data.email_fail) {
                $('#email_error').text('This Email already in use against an account.');
            }
            else if (data.company_fail) {
                $('#email-error-popup').trigger('click');
            }
            else if (data.login_fail) {
                $('#login-error').removeClass('display-hide');
            }
            else if (data.forget_fail) {
                $.each(data.errors, function (index, value) {
                    var errorSpan = '#' + index + '_error';
                    $(errorSpan).empty().append(value);
                });
                $('#successMessage').empty();
            }
            else if (data.forget_user_fail) {
                $('#forget-user-error').removeClass('display-hide');
            }
            else if (data.reset_fail) {
                $.each(data.errors, function (index, value) {
                    var errorSpan = '#' + index + '_error';
                    $(errorSpan).removeClass('hidden');
                    $(errorSpan).empty().append(value);
                });
                $('#successMessage').empty();
            }
        })
        .fail(function (jqXHR, ajaxOptions, thrownError) {
            alert('No response from server');
        });
    return false;
});

如何在成功条件下路由到其他页面?在表单提交按钮上触发ajax .

回答(1)

2 years ago

当您正在执行ajax请求时,您不能仅在成功验证时从控制器重定向 . 相反,只需返回要重定向到的url,作为对ajax请求的响应,类似于返回验证错误的方式 . 并在您的js文件中使用该URL重定向到新页面 .

#your above code

                else if (data.forget_user_fail) {
                    $('#forget-user-error').removeClass('display-hide');
                }
                else if (data.reset_fail) {
                    $.each(data.errors, function (index, value) {
                        var errorSpan = '#' + index + '_error';
                        $(errorSpan).removeClass('hidden');
                        $(errorSpan).empty().append(value);
                    });
                    $('#successMessage').empty();
                 }
                 else{
                      window.location.replace(data.redirect_url); //this will redirect to new page
                 }
        })
        .fail(function (jqXHR, ajaxOptions, thrownError) {
            alert('No response from server');
        });
    return false;
});