我正在使用load more button
来获取数据,并且一切正常,问题是当我有第二个表Ajax请求时它将无法执行。
controller
$jobs = Job::where('status', '1')->orderby('id', 'desc')->paginate(5);
if ($request->ajax()) {
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]);
}
return view('front.pages.job', compact('page', 'jobs'));
上面的这段代码使用2,3,4,etc.
加载了页面load more button
的工作,并且可以正常工作。
现在,当我尝试使用相同的文件并请求但这次用于另一个表时,它将停止工作:
controller
$jobs = Job::where('status', '1')->orderby('id', 'desc')->paginate(5);
$portfolios = Portfolio::orderby('id', 'desc')->where('status', '1')->paginate(4);
if ($request->ajax()) {
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]);
}
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}
然后我的front.pages.test
如下:
@if(isset($jobs))
@foreach($jobs as $job)
html of my jobs style etc....
@endforeach
@elseif(isset($portfolios))
@foreach($portfolios as $portfolio)
html of my portfolios style etc....
@endforeach
@endif
compact
时,它停止运行?谢谢。
答案 0 :(得分:0)
检查一下。
问题是当我有第二个表Ajax请求时它不会执行。
if ($request->ajax()) { //<-- second request is ajax is it not?
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
}
//< --- as you said it's never executed -->
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}
请参阅您的第二个请求传递此文本if ($request->ajax()) { return ...}
-由于此代码上方的ia永远不会到达新代码,因为它会以这种状态返回。明确地说,您说这两个请求都是AJAX,所以在这种情况下就是这样。
您应该发送另一种数据,例如模式,可以用来打开操作。或其他一些方法来区分它们。
PS-我不使用Laravel,所以我不知道Laravel批准的方式来做,但这应该很简单。
我将进一步解释。
现在请理解,这些请求来自何处,它们应该做什么或所遵循的顺序并不重要。唯一重要的是,它们为它们两个都调用相同的代码,并且都是两个AJAX请求。
因此,让我们逐步进行第一个操作:
if($request->ajax())
或用英语询问:“此请求是AJAX请求吗?”我们说的是。这样就可以了$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
,由于返回而退出了该响应(无论“ it”是什么),并且#4以下的代码均未运行。为直观起见,我将以下几行麻木了:
/*2*/ if ($request->ajax()) { //<-- second request is ajax is it not?
/*3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
/*4*/ return response()->json(['html'=>$view]); //<--- return
/*exit*/ }
//< --- as you said it's never executed -->
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}
到目前为止很好。
现在让我们以相同的方式(字面意思)通过第二个请求:
if($request->ajax())
或用英语询问:“此请求是AJAX请求吗?”我们说的是。这样就可以了$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
,由于返回而退出了该响应(无论“ it”是什么),并且#4以下的代码均未运行。为直观起见,我将以下几行麻木了:
/*2*/ if ($request->ajax()) { //<-- second request is ajax is it not?
/*3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
/*4*/ return response()->json(['html'=>$view]); //<--- return
/*exit*/ }
//< --- as you said it's never executed -->
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}
熟悉吗?
应该与第一个完全相同。正如我现在几次说过的,因为两个请求都是AJAX,所以此代码首先检查它们是否为AJAX。仅运行第一段代码。
那么您能做些什么,正如我所说的,我不使用Laravel,所以我无法知道您的新代码是否还能正常工作。我所能做的就是发布的几行代码以及对问题的描述。因此,我可以向您展示如何解决此问题的唯一方法是重新安排它。这样,我正在做的事情就是四处移动。
那很好,因为我可以用它来修复它。也许这不是解决它的最佳方法。但是,我相信这将使您的代码运行。
if ($request->ajax()) {
if($page->template == 'portfolio'){
return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
return view('front.pages.job', compact('page', 'jobs'));
}else{
$view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
}
}
让它运行这一步:
if($request->ajax())
或用英语询问:“此请求是AJAX请求吗?”我们说的是。这样就可以了if($page->template == 'portfolio'){
,其含义是Page Tempate等于“投资组合”。我出于“可读性”的原因将数字连续下移。} elseif($page->template == 'job'){
,但是这次正在检查$page
的“职位”。}else{
,这始终是正确的,因此,如果其他两个条件都没有通过,我们将运行原始代码(此代码块中的代码)。为直观起见,我将下面的行麻木了
/*2*/ if ($request->ajax()) {
/*3*/ if($page->template == 'portfolio'){
/*3.1*/ return view('front.pages.portfolio', compact('page', 'portfolios'));
} elseif($page->template == 'job'){
/*3.2*/ return view('front.pages.job', compact('page', 'jobs'));
}else{
/*3.3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
return response()->json(['html'=>$view]); //<--- return
}
}
如您所见,当它们是AJAX请求时,我们现在将满足所有内部条件,即您所说的。正如我在本练习开始时提到的那样,这些操作做什么或它们处于什么顺序都无关紧要。这里也是如此。就像我在第二个请求部分中所做的一样。
如果您再次提出请求(针对此新代码),则该请求的运行将与此处的第一个请求完全相同,在解决方案部分中完成。
基本上,无论哪种情况,代码都不关心它们的来源,它将每个请求视为一个新请求。 HTTP是无状态的,这就是为什么我们需要Cookies和Databases等。 (原始代码和新内容之间的区别)是此处(新内容中)的第二个请求可以访问所有3个请求,在这里我们有另一组条件可以将我们定向到正确的输出。
因此,假设我们将以上代码运行到#3,那么此请求中的$page
等于job
,我们运行以下代码:
/*3.2*/ return view('front.pages.job', compact('page', 'jobs'));
现在说我们要再做一次,但是这次$page
不等于job
,也不等于portfolio
。好吧,在这种情况下,我们使用以下代码执行else
块:
/*3.3*/ $view = (String) view('front.pages.test',compact('jobs', 'portfolios'));
依此类推,无论您要提出多少请求。
现在您必须了解,我什至不知道$page
这个东西是否被放置,等等。但是,只要上面的代码是应该在Laravel中使用的方式,就应该执行这些新调用。不管它们是否有效,我都不知道。但是,我想您会发现的。
我真的希望这是有道理的,因为您的评论确实没有。
现在,当我尝试使用相同的文件并请求但这次用于另一个表时,它将停止工作
它停止工作的原因是您发送具有不同结构的Table2数据。如果它是不同的表,则列可能会不同,数据也将有所不同,等等。。。但是,尽管您运行的是第一个或原始表的代码,但您正在运行它。
我真的不知道该怎么说。可能还存在其他问题,但这至少将允许它运行您的代码。
干杯!