首页 > 解决方案 > 当呼叫来自 JS Ajax 时如何重定向到 Laravel 路由

问题描述

我正在尝试创建一个重定向到 laravel 控制器中的路由,其中​​对该控制器的调用来自 js 文件中的 Ajax 调用。

示例:我加载了一个视图localhost:8000/viewone,在这个视图中我运行了一个 js 代码,它对 Laravel 路由进行 Ajax 调用:routeone。在链接到的控制器函数中routeone,代码进行了一些数据处理,然后需要加载另一个视图:viewTwo

问题是viewTwo加载没有发生,我得到的只是onsuccessAjax 调用函数中返回语句中的视图 HTML 代码。

我尝试了什么:

viewTwo通过创建新路由来创建一个控制器routeTwo,在我的routeone控制器中,我使用会话数据重定向到该路由。

return redirect()->route('routeTwo')->with(['data'=>$data])

routeTwo控制器中,我获取会话数据并返回viewTwo.

$data = \Session::get('data');
return view('viewTwo',['data'=>$data]);

它仍然不起作用。发生的情况是viewTwo加载作为 XHR 请求发生,并且我得到了作为 XHR 响应数据加载到主浏览器视图(如第一个视图)中的 HTML 页面。

问题:当调用来自 Js AJAX 函数时,如何强制重定向到/加载视图。

标签: javascriptphpjqueryajaxlaravel

解决方案


通过从 ajax 加载或渲染 html 在第一个视图页面中执行此操作

<div class="newView"></div>

通过ajax成功函数添加这一行

$('.newView').html(data.html);

在控制器中

$view = view("viewnamewhatuhave",compact('data'))->render();

按视图立面

$view =  View::make('viewnamewhatuhaveset',[$data])->render();

return response()->json(['html' => $view]);

推荐阅读