Sto cercando di ottenere una tabella html per tornare su una chiamata Ajax.
itinerario:
Route::post('job/userjobs', '[email protected]');
ajax sulla pagina di chiamata:
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 }}");
Controller:
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) ); } } }
vista:
@section('content') @foreach ($userjobs as $userjob) {{ $userjob->title }}
{{ $userjob->description }} @endforeach
@stop
Non riesco a ottenere nulla nei dati di json.html. Niente. Se nel controller dico:
return response()->json( array('success' => true, 'html'=>'html here') );
Questo funziona bene.
Come posso restituire una vista da una chiamata ajax in Laravel 5.
La funzione view()
crea solo un’istanza della class View
. Non solo una stringa HTML. Per questo dovresti chiamare render()
:
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->render(); return response()->json(array('success' => true, 'html'=>$returnHTML));
usa la funzione stringa prima di visualizzare il nome del file come
return (String) view('Company.allUserAjax');
se il tuo ajax è corretto e stai ottenendo risultati dal tuo DB
$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) );
Ok: ho trovato per tentativi ed errori che non si includono i comandi del modello blade nel file di visualizzazione perché funzioni.
Avevo:
@section('content') @foreach ($userjobs as $userjob) {{ $userjob->title }}
{{ $userjob->description }} @endforeach
@stop
e ora sta lavorando con:
title; ?>
description; ?>
Altho ho cercato – non ho mai trovato documentazione che lo affermasse.
Non restituire la visualizzazione come JSON, è sufficiente restituire la vista dal controller Ad esempio:
$view = view("",compact('data'))->render(); return $view;
Questo funzionerà sicuramente.
rimuovere questo se condizione e vedere se funziona
if(Request::isMethod('post') && Request::ajax()) {
idk se stai ancora cercando la risposta, ma mi sono imbattuto nello stesso problema come te, ha continuato a restituire vuoto. la chiave del successo è stata la rimozione della parte @section @endsection nella vista parziale
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->renderSections()['content'];
Quindi questa domanda è vecchia e la risposta più spinta non ha risolto il problema per il richiedente e nemmeno per me. Ho incontrato lo stesso problema e mi ci sono voluti due giorni per trovare la soluzione. Ovunque sono venuto alla ricerca di risposte detto uso ->render()
. Ma nulla è tornato. Ho una visione parziale che volevo includere. Non avevo esteso la vista parziale o dato un nome di sezione. Dal momento che questo non è necessario quando lo si include all’interno di un file blade con la direttiva include.
Quindi la soluzione è, racchiudi il tuo html all’interno di una sezione e invece di render()
, usa renderSections()['sectionname']
. L’uso di render()
non funzionerà.
Spero che questo garantisca a qualcuno un po ‘di tempo e frustrazione!