J'essaie d'obtenir une table HTML pour revenir sur un appel ajax.
route:
Route::post('job/userjobs', 'JobController@userjobs');
ajax sur la page d'appel:
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 }}");
manette:
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) );
}
}
}
vue:
@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
Je ne reçois rien dans les données json.html. rien. Si dans le contrôleur je dis:
return response()->json( array('success' => true, 'html'=>'<span>html here</html>') );
Cela fonctionne très bien.
Comment puis-je retourner une vue d'un appel ajax dans Laravel 5.
La fonction view()
crée simplement une instance de la classe View
. Pas simplement une chaîne HTML. Pour cela, vous devez appeler render()
:
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render();
return response()->json(array('success' => true, 'html'=>$returnHTML));
utiliser la fonction de chaîne avant le nom du fichier de vue comme
return (String) view('Company.allUserAjax');
si votre ajax est correct et que vous obtenez des résultats de votre base de données
$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) );
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->renderSections()['content'];
Donc, cette question est ancienne et la réponse la plus votée ne résout pas le problème pour le demandeur et pour moi non plus. J'ai rencontré le même problème et il m'a fallu deux jours pour trouver la solution. Partout où je suis venu chercher des réponses à cette utilisation ->render()
. Mais rien n'est revenu. J'ai une vue partielle que je voulais inclure. Je n'avais pas étendu ma vue partielle ou donné un nom de section. Comme cela n’est pas nécessaire lors de l’inclusion dans un fichier de lame avec la directive include.
La solution consiste donc à inclure votre code HTML dans une section et à la place de render()
, utilisez renderSections()['sectionname']
. Utiliser render()
ne fonctionnera pas.
J'espère que cela protégera quelqu'un du temps et de la frustration!
Ne renvoyez pas votre vue au format JSON, mais renvoyez-la simplement à partir de votre contrôleur Par exemple:
$view = view("<your url>",compact('data'))->render();
return $view;
Cela fonctionnera à coup sûr.
Ok - J'ai constaté par essais et erreurs que vous n'incluez pas les commandes de modèle de lame dans le fichier d'affichage pour que cela fonctionne.
J'ai eu:
@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
et maintenant son travail avec:
<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>
Bien que j'ai cherché - je n'ai jamais trouvé de documentation indiquant cela.
idk si vous êtes toujours à la recherche d’une réponse mais que j’ai rencontré le même problème que vous, il restait vierge. la clé du succès était de supprimer la partie @section @endsection de votre vue partielle
supprimer cette condition et voir si cela fonctionne
if(Request::isMethod('post') && Request::ajax()) {
Cela m'a aidé:
echo view('ajaxView')->with(['value' => 'some value']);
J'ai utiliséecho view ('ajaxView') à la placereturn view ('ajaxView').