如何在 Ajax 请求中重定向回 Laravel 8 中的错误

Posted

技术标签:

【中文标题】如何在 Ajax 请求中重定向回 Laravel 8 中的错误【英文标题】:How to redirect back with errors in Laravel 8 inside an Ajax request 【发布时间】:2021-02-14 16:21:52 【问题描述】:

当 data.custom_input === "false" 时,我想用错误重定向回来。 redirect()->back() 在控制台中给了我这个错误:Uncaught SyntaxError: Unexpected number: cd988e2f-ba9c-4b66-97d9-618e776ae740:157。这是我传递给所有路线的 uuid。

URL::previous 工作正常,但我不能传递任何错误。

let interval = 1000;

function doAjax() 
$.ajax(
    type: 'POST',
    url: '/listen/custominput',
    data: 
        '_token': $('meta[name="csrf-token"]').attr('content')
    ,
    dataType: 'json',

    success: function (data) 
        if (data.custom_input === "true") 
            window.location.href = "route('index', $link->id)";

         else if (data.custom_input === "false") 
            window.location.href = redirect()->back()->withErrors(['error', 'has-error']);
        
    ,

    complete: function (data) 
        setTimeout(doAjax, interval);
    
);

setTimeout(doAjax, interval);

我需要做什么?

【问题讨论】:

你在 javascript 中使用刀片? @RokSprogar 是的,它大部分时间都运行良好。 您可以将发送到前端的路由 route('index', $link->id) 输出为字符串(然后表示将执行的javascript的一部分在浏览器中)...但是你不能输出重定向,因为这是一个 laravel/blade/server 函数(并且不在 fe/javascript 上执行) 【参考方案1】:

您的 (POST) 路由不应返回 custom_input = "false" 然后尝试在 JavaScript 中重定向回来,您应该在 (POST) 路由控制器(而不是刀片/js 中)中使用您已有的重定向:

redirect()->back()->withErrors(['error', 'has-error'])

【讨论】:

这行得通,但我怎样才能将错误/会话传递到上一页。 你可以在路由中添加一个get参数(在Javascript中),但是你为什么还要在前端重定向呢?您应该在控制器中重定向,而不是返回 custom_input = "false",而是使用:redirect()->back()->withErrors(['error', 'has-error']) 你建议为此开辟一条全新的路线吗? 我已经编辑了我的答案,如果这是您需要的,请接受它。 :)

以上是关于如何在 Ajax 请求中重定向回 Laravel 8 中的错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 4 中重定向回时保留表单值

在laravel中重定向到外部url时如何保留会话数据

在 Laravel 中重定向域名

如何在 laravel jetstream 中重定向?

如何在 Laravel 中重定向后设置选择值

在laravel中发布请求后如何重定向回上一页?