如何从Laravel 5中的ajax调用返回视图

我正在尝试获取一个html表来返回ajax调用。

路线:

Route::post('job/userjobs', 'JobController@userjobs'); 

调用页面上的ajax:

 function getUserJobs(userid) { $_token = "{{ csrf_token() }}"; var userid = userid; $.ajax({ headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }, url: "{{ url('/job/userjobs') }}", type: 'POST', cache: false, data: { 'userid': userid, '_token': $_token }, //see the $_token datatype: 'html', beforeSend: function() { //something before send }, success: function(data) { console.log('success'); console.log(data); //success //var data = $.parseJSON(data); if(data.success == true) { //user_jobs div defined on page $('#user_jobs').html(data.html); } else { $('#user_jobs').html(data.html + '{{ $user->username }}'); } }, error: function(xhr,textStatus,thrownError) { alert(xhr + "\n" + textStatus + "\n" + thrownError); } }); } //on page load getUserJobs("{{ $user->id }}"); 

控制器:

 public function userjobs() { $input = Request::all(); if(Request::isMethod('post') && Request::ajax()) { if($input['userid']) { $userjobs = Userjob::select('select * from user_jobs where user_id = ?', array($input['userid'])); if(! $userjobs) { return response()->json( array('success' => false, 'html'=>'No Jobs assigned to ') ); } $returnHTML = view('job.userjobs')->with('userjobs', $userjobs); return response()->json( array('success' => true, 'html'=>$returnHTML) ); } } } 

视图:

 @section('content')  @foreach ($userjobs as $userjob)  @endforeach 
{{ $userjob->title }}
{{ $userjob->description }}
@stop

我在json.html数据中没有得到任何东西。 没有。 如果在控制器中我说:

 return response()->json( array('success' => true, 'html'=>'html here') ); 

这很好用。

如何从Laravel 5中的ajax调用返回视图。

view()函数只是创建View类的一个实例。 不只是一个HTML字符串。 为此你应该调用render()

 $returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render(); return response()->json(array('success' => true, 'html'=>$returnHTML)); 

在视图文件名之前使用字符串函数

 return (String) view('Company.allUserAjax'); 

如果您的ajax是正确的,并且您从数据库中获得结果

  $returnHTML = view('job.userjobs',[' userjobs'=> $userjobs])->render();// or method that you prefere to return data + RENDER is the key here return response()->json( array('success' => true, 'html'=>$returnHTML) ); 

好的 – 我通过反复试验发现您没有在视图文件中包含刀片模板命令以使其正常工作。

我有:

 @section('content')  @foreach ($userjobs as $userjob)  @endforeach 
{{ $userjob->title }}
{{ $userjob->description }}
@stop

现在它的工作:

 
title; ?>
description; ?>

我搜索过 – 我从来没有找到说明这一点的文件。

不要将视图作为JSON返回,只需从控制器返回视图例如:

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

这肯定会起作用。

删除此if条件并查看它是否有效

 if(Request::isMethod('post') && Request::ajax()) { 

idk如果你还在寻找答案,但我遇到了和你一样的问题,它一直空白。 成功的关键是在局部视图中删除@section @endsection部分

 $returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->renderSections()['content']; 

所以这个问题已经过时了,最受欢迎的答案并没有解决问题的问题,也没有解决问题。 我遇到了同样的问题,我花了两天时间才找到解决方案。 我到处寻找答案所说的用法->render() 。 但没有回来。 我有一个部分视图,我想包括。 我没有扩展我的部分视图或给它一个部分名称。 因为使用include指令将其包含在刀片文件中时不需要这样做。

所以解决方案是将html包含在一个部分而不是render() ,使用renderSections()['sectionname'] 。 只使用render()将无法正常工作。

我希望这会让某些人安然无恙!