Php 拉雷维尔和PJAX

Php 拉雷维尔和PJAX,php,ajax,laravel,pjax,Php,Ajax,Laravel,Pjax,我一辈子都不能让Pjax和Laravel一起工作。我什么都试过了,但是刀锋模板把事情搞砸了。当我不使用刀片模板时,我可以让它工作 发生的情况是,AJAX页面加载后,不幸的是,出现了一个重定向到同一个URL的情况。因此页面加载两次 我不知道如何修改刀片模板引擎来适应Pjax并抑制第二页的加载。有人有任何线索吗?您是如何扩展布局的?为了让PJAX正常工作,您基本上需要两个布局——一个包含所有脚本和其他内容,另一个只显示您请求的视图 app/Providers/AppServiceProvider.p

我一辈子都不能让Pjax和Laravel一起工作。我什么都试过了,但是刀锋模板把事情搞砸了。当我不使用刀片模板时,我可以让它工作

发生的情况是,AJAX页面加载后,不幸的是,出现了一个重定向到同一个URL的情况。因此页面加载两次


我不知道如何修改刀片模板引擎来适应Pjax并抑制第二页的加载。有人有任何线索吗?

您是如何扩展布局的?为了让PJAX正常工作,您基本上需要两个布局——一个包含所有脚本和其他内容,另一个只显示您请求的视图

app/Providers/AppServiceProvider.php

公共函数启动(){
view()->share('layout','layouts.main');
}
app/Middleware/PjaxCheck.php

公共函数句柄($request,Closure$next)
{
如果($request->pjax())
{
view()->share('layout','layouts.pjax');
}
返回$next($request);
}
(别忘了将其添加到
内核中

resources/views/layouts/main.blade.php


@产量(‘含量’)
resources/views/layouts/pjax.blade.php

@yield('content'))
查看

@extends($layout)
@节(“内容”)
一些html内容
@端部


本质上,在
AppServiceProvider
中,您告诉每个视图,
$layout
var应该默认为
layouts.main
。在Pjax中间件中,然后使用
layouts.Pjax
覆盖该变量。

如何扩展布局?为了让PJAX正常工作,您基本上需要两个布局——一个包含所有脚本和其他内容,另一个只显示您请求的视图

app/Providers/AppServiceProvider.php

公共函数启动(){
view()->share('layout','layouts.main');
}
app/Middleware/PjaxCheck.php

公共函数句柄($request,Closure$next)
{
如果($request->pjax())
{
view()->share('layout','layouts.pjax');
}
返回$next($request);
}
(别忘了将其添加到
内核中

resources/views/layouts/main.blade.php


@产量(‘含量’)
resources/views/layouts/pjax.blade.php

@yield('content'))
查看

@extends($layout)
@节(“内容”)
一些html内容
@端部


本质上,在
AppServiceProvider
中,您告诉每个视图,
$layout
var应该默认为
layouts.main
。在Pjax中间件中,然后使用
layouts.Pjax
覆盖该变量。

此处为原始海报。这种多重装载问题是由宅地/流浪者速度缓慢造成的。如果将PJAX上的
timeout
选项设置为
3500
(ms),则不会遇到此问题


对于那些担心3.5秒页面加载速度慢且使PJAX无用的人,请注意,在生产服务器上,即使是EC2微实例,您的Laravel应用程序加载时间将是Vagrant上的1/10,因此您将处于
350
ms范围内,并且使用PJAX时默认
650
ms超时不会有问题。

此处为原始海报。这种多重装载问题是由宅地/流浪者速度缓慢造成的。如果将PJAX上的
timeout
选项设置为
3500
(ms),则不会遇到此问题

对于那些担心3.5秒页面加载速度慢且使PJAX无用的人,请注意,在生产服务器上,即使是EC2微实例,您的Laravel应用程序加载时间将是Vagrant上的1/10,因此您将处于
350
ms范围内,并且使用PJAX时默认
650
ms超时不会有问题。

您可以使用此代码

$(document).pjax('a', '#pjax-container',{
    timeout : 10000,
    fragment : ".root"
});
超时:ajax超时(以毫秒为单位),在此之后强制执行完全刷新

片段:用于从ajax响应中提取片段的CSS选择器

您可以使用以下代码

$(document).pjax('a', '#pjax-container',{
    timeout : 10000,
    fragment : ".root"
});
超时:ajax超时(以毫秒为单位),在此之后强制执行完全刷新


片段:用于从ajax响应中提取片段的CSS选择器

非常好的答案@Alex。我遇到的问题围绕着默认的pjax响应超时
650ms
。使用Codeigniter,我从未遇到过响应超时的问题,但遗憾的是,对于我应用程序的大部分链接,我都遇到了Laravel。该应用程序没有做任何特殊的事情,只是像许多其他应用程序一样访问数据库,所以不确定可以做什么。将超时时间延长到
3000ms
确实解决了问题,但这与PJAX的目的背道而驰。这似乎有点……不对劲!您是否尝试过使用类似的工具分析应用程序以找出瓶颈所在?以下是我的配置文件:
启动(493.21ms)、应用程序(561.17ms)、应用程序后(26.3ms)
。看起来有点长,对吧?很长。重新安装<代码>启动(64.74毫秒)、应用程序(5.3毫秒)、应用程序后(1.68毫秒)使用
Debugbar::startMeasure()
::stopMeasure()
评测应用程序的某些部分(如在
AppServiceProvider
中加载提供程序等),尝试并找到瓶颈,谢谢@Alex!正是我想要的。我在Smarty做了很多年类似的事情,但现在我正在学习Laravel+Blade,所以你的回答对我帮助很大!非常好的回答@Alex。我遇到的问题围绕着默认的pjax响应超时
650ms
。使用Codeigniter,我从未遇到过响应超时的问题,但遗憾的是,对于我应用程序的大部分链接,我都遇到了Laravel。该应用程序没有做任何特殊的事情,只是像许多其他应用程序一样访问数据库,所以不是