Laravel 5.5+jQuery:Ajax请求后如何返回带数据的视图?
问题分析与解决方案
首先明确:通过Ajax请求直接返回视图并实现页面跳转是不可行的,因为Ajax的核心是异步获取数据,它只会接收服务器返回的内容,但不会自动触发浏览器的页面跳转行为——你的当前代码里,服务器确实把视图的HTML返回给了Ajax请求,但前端没有对这个返回结果做任何处理,所以页面才毫无反应。
先梳理下你现有代码的问题:
- 前端JS的Ajax请求没有设置
success或done回调,完全没处理服务器返回的视图内容; - 即便你补上回调拿到了视图HTML,也只能把它插入到当前页面的某个容器里,无法实现跳转到新页面的效果。
更简洁的解决方案(参考@charlietfl的建议)
既然你的需求是跳转到携带数据的新页面,完全没必要用Ajax,直接用<a>标签就能实现,既符合浏览器原生行为,又简单易维护:
前端代码替换:
把原来的按钮换成<a>标签,直接将参数拼在URL中:
<a href="{{ url('recommandationsSeances') }}?idSeance={{ $seanceId }}" id="button-recommandations">查看推荐场次</a>
(这里的$seanceId就是你原本通过$(e.relatedTarget).data('seance')获取的场次ID,直接在后端渲染页面时传入模板即可)
后端代码无需修改:
你的Laravel控制器代码可以保持原样,依然返回携带数据的视图:
return view('listeRecommandations', [ 'recommandationAutresActiviteMemeDateHeure' => $recommandationAutresActiviteMemeDateHeure, 'recommandationsMemeActiviteMemeHeure' => $recommandationsMemeActiviteMemeHeure, 'recommandationsMemeActiviteMemeDate' => $recommandationsMemeActiviteMemeDate ]);
若坚持要用Ajax实现(不推荐,无必要)
如果你有特殊需求(比如需要先做前端校验再跳转),可以在Ajax的成功回调里通过window.location.href手动触发页面跳转,同时带上参数:
$('#button-recommandations').on('click', function (e) { e.preventDefault(); const seanceId = $(e.relatedTarget).data('seance'); // 这里可以添加前端校验逻辑 // 校验通过后直接跳转 window.location.href = `recommandationsSeances?idSeance=${seanceId}`; });
这种方式本质上还是触发浏览器跳转,和<a>标签效果一致,但多了不必要的异步请求步骤,所以更推荐直接用<a>标签的方案。
内容的提问来源于stack exchange,提问作者Royce
相关产品推荐
相关产品推荐

