Laravel 5.1 - 在Ajax导航时刷新页面

3
在我的应用程序中,我使用了ajax配置导航,这样我可以非常快速地获取视图的内容(仅为纯HTML)。我还实现了JavaScript的history,因此我可以在导航时修改URL。
但是当我在像my-app-/news这样的URL上刷新页面时,当然我会得到通过ajax请求的相同内容:只有HTML的视图,但在这种情况下,我需要完整的视图,而不仅仅是内容。
route.php
Route::get('/', 'PagesController@index');
Route::get('/{page}', 'PagesController@ajaxCall');

PagesController.php

class PagesController extends Controller {

    public function index(){
        return view('pages.index');
    }

    public function ajaxCall($page){
        return view('content.'.$page)->render();
    }

}

如何创建另一个路由和方法,类似于我的主页,我可以在页面刷新时调用完整视图?

因为这些方法只会返回ajax调用的响应,而不是告诉浏览器切换页面的响应。如果您返回一个带有200甚至302的视图,那么只有发起ajax请求的端才能看到它,而浏览器则不会看到。 - Zarathuztra
实际上,我不明白如何解决这个问题。 - Luca Mormile
为了避免混淆,这是我的Javascript代码:http://pastebin.com/1xp3JNLJ - Luca Mormile
2个回答

3

您可以检测请求是否通过AJAX进行:

class PagesController extends Controller {

    public function index(){
        return view('pages.index');
    }

    public function ajaxCall($page){

        if(\Request::ajax()) {
           return view('content.'.$page)->render();
        } else {
           return ... //complete view
        }
    }

}

没有数据被发送到服务器,那你为什么要发帖呢?这是一个视图请求,所以应该使用get。也许我误解了你的回答。 - Zarathuztra
是的,我正在请求一个视图,而不仅仅是数据。 - Luca Mormile
转换为更简单的方法。 - Arthur Samarcos

0

听起来很困难。

'ajax'这个术语非常琐碎。你用什么?jQuery,AngularJS?

在你的情况下,将前端和后端分开是很好的选择。例如使用AngularJS(单页应用程序!),它与你的Laravel/Lumen后端连接。你的后端只需返回json结果(RESTful控制器)。

阅读此文档:http://laravel.com/docs/5.1/controllers#restful-resource-controllers

为什么?我注意到你因为混合前端和后端而遇到了麻烦。例如,使用AngularJS可以创建一个单页应用程序。通过路由,你可以(重新)加载“页面”的特定部分。同时,连接到Laravel/Lumen API并在SPA中处理json输出也非常容易。你的后端没有(html)视图,也不会重定向。

不错的例子:https://scotch.io/tutorials/create-a-laravel-and-angular-single-page-comment-application


你说得对。不幸的是,我仍然没有关于Angular的高级知识,所以我使用jQuery创建了这个应用程序。 - Luca Mormile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接