我正在尝试获取一个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')
<table class="table table-striped">
<tbody>
@foreach ($userjobs as $userjob)
<tr>
<td><strong>{{ $userjob->title }}</strong><br />
{{ $userjob->description }}
</td>
</tr>
@endforeach
</table>
@stop
我在json.html数据中没有得到任何东西。没有。如果在控制器中我说:
return response()->json( array('success' => true, 'html'=>'<span>html here</html>') );
这很好用。
如何从Laravel 5中的ajax调用返回视图。
答案 0 :(得分:33)
view()
函数只创建View
类的实例。不只是一个HTML字符串。为此,您应该致电render()
:
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render();
return response()->json(array('success' => true, 'html'=>$returnHTML));
答案 1 :(得分:4)
在查看文件名之前使用字符串函数,如
return (String) view('Company.allUserAjax');
答案 2 :(得分:3)
如果您的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) );
答案 3 :(得分:3)
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->renderSections()['content'];
因此,这个问题已经过时,最受支持的答案并不能解决问问者和我的问题。我遇到了同样的问题,花了两天时间才找到解决方案。我到处都在寻找答案,说->render()
。但是什么也没回来。我有一个部分观点,我想包括在内。我没有扩展我的局部视图或为其指定一个部分名称。由于使用include指令将其包含在刀片文件中时不需要这样做。
解决方案是,将HTML括在一个节中,而不要使用render()
来代替renderSections()['sectionname']
。仅使用render()
无效。
我希望这可以使某人安全一些,并使其受挫!
答案 4 :(得分:2)
不要以JSON格式返回视图,只需从控制器返回视图 例如:
$view = view("<your url>",compact('data'))->render();
return $view;
这可以肯定地工作。
答案 5 :(得分:1)
好的 - 我通过反复试验发现您没有在视图文件中包含刀片模板命令,以便工作。
我有:
@section('content')
<table class="table table-striped">
<tbody>
@foreach ($userjobs as $userjob)
<tr>
<td><strong>{{ $userjob->title }}</strong><br />
{{ $userjob->description }}
</td>
</tr>
@endforeach
</table>
@stop
现在正在使用:
<table class="table table-striped">
<tbody>
<?php foreach ($userjobs as $userjob){?>
<tr>
<td><strong><?php echo $userjob->title; ?></strong><br />
<?php echo $userjob->description; ?>
</td>
</tr>
<?php } ?>
</table>
我搜索过 - 我从未找到说明这一点的文件。
答案 6 :(得分:0)
删除此if条件并查看其是否有效
if(Request::isMethod('post') && Request::ajax()) {
答案 7 :(得分:0)
idk如果你还在寻找答案,但我遇到了和你一样的问题,它一直空白。成功的关键是在部分视图中删除@section @endsection部分
答案 8 :(得分:0)
这对我有帮助:
echo view('ajaxView')->with(['value' => 'some value']);
我使用了 echo 视图('ajaxView')而不是 返回 view('ajaxView')。
答案 9 :(得分:0)
我没有这些就可以工作:@section&@stop
// tests/setupTests.ts
beforeEach(() => {
console.log('before each')
})
afterEach(() => {
console.log('after each')
})
要么
<table class="table table-striped">
<tbody>
@foreach ($userjobs as $userjob)
<tr>
<td><strong>{{ $userjob->title }}</strong><br />
{{ $userjob->description }}
</td>
</tr>
@endforeach
</table>
或这个
$returnHTML = view('job.userjobs',[' userjobs'=> $userjobs])->render();// or method that you prefere to return data + RENDER is the key here
都有效
答案 10 :(得分:0)
$view = view("job.userjobs",compact($userjobs))->render();
return response()->json(['html'=>$view]);
答案 11 :(得分:0)
如果您在Laravel中使用AJAX,那么当您要显示具有AJAX响应的视图时,请不要使用 return 命令,而应使用 echo 命令。
例如,请勿使用:
return view('ajax', ['ajax_response'=> $response]);
使用:
echo view('ajax', ['ajax_response'=> $response]);
其他示例,请勿使用:
$view = view("job.userjobs",compact($userjobs))->render();
return response()->json(['html'=>$view]);
使用:
$view = view("job.userjobs",compact($userjobs))->render();
echo response()->json(['html'=>$view]);