【问题标题】:Routing through AJAX通过 AJAX 路由
【发布时间】:2015-02-07 09:04:33
【问题描述】:

我有一个 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 在表单提交按钮上触发。

【问题讨论】:

    标签: ajax laravel


    【解决方案1】:

    当您执行 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;
    });
    

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2017-04-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2011-05-27
      • 2016-11-04
      • 1970-01-01
      相关资源
      最近更新 更多