it-swarm.com.de

Wie kann ich eine Ansicht aus einer AJAX in Laravel 5 anrufen?

Ich versuche, eine HTML-Tabelle zu erhalten, um bei einem Ajax-Aufruf zurückzukehren. 

route: 

Route::post('job/userjobs', '[email protected]');  

ajax auf aufrufende Seite: 

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 }}");

regler: 

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) );

        }
    }   
}

aussicht: 

@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

Ich bekomme nichts in den json.html-Daten. nichts. Wenn ich im Controller sage: 

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

Das funktioniert gut. 

Wie kann ich eine Ansicht von einem Ajax-Anruf in Laravel 5 wiedergeben?.

12
Chris Jackson

Die Funktion view() erstellt lediglich eine Instanz der Klasse View. Nicht nur ein HTML-String. Dafür sollten Sie render() anrufen:

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

verwenden Sie die Zeichenfolgenfunktion vor dem Anzeigen des Dateinamens als

return (String) view('Company.allUserAjax');
4
Imtiaz Pabel

wenn Ihr Ajax korrekt ist und Sie Ergebnisse von Ihrer Datenbank erhalten

 $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
Maky
$returnHTML = view('job.userjobs')->with('userjobs', $userjobs)->renderSections()['content'];

Diese Frage ist also alt und die am meisten beantwortete Antwort löste das Problem für den Fragesteller und für mich auch nicht. Ich hatte das gleiche Problem und brauchte zwei Tage, um die Lösung zu finden. Überall kam ich auf der Suche nach Antworten der besagten Verwendung ->render(). Aber nichts ist zurückgekehrt. Ich habe eine Teilansicht, die ich einschließen wollte. Ich hatte meine Teilansicht nicht erweitert oder ihr einen Abschnittsnamen gegeben. Da dies nicht erforderlich ist, wenn es in einer Blade-Datei in der Include-Direktive enthalten ist.

Die Lösung lautet also: Schließen Sie Ihre HTML-Datei in einen Abschnitt ein und verwenden Sie statt render()renderSections()['sectionname']. Nur die Verwendung von render() wird nicht funktionieren. 

Ich hoffe, dass dies jemandem Zeit und Frustration erspart!

2
Jorn

Geben Sie Ihre Ansicht nicht als JSON zurück, sondern geben Sie die Ansicht von Ihrem Controller zurück Beispiel:

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

Das wird sicher funktionieren.

1
Reva

Ok - Ich habe durch Ausprobieren festgestellt, dass Sie die Blatevorlagenbefehle nicht in die Ansichtsdatei aufnehmen, damit dies funktioniert.

Ich hatte:

@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

und jetzt arbeitet es mit:

<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>

Trotzdem habe ich gesucht - ich habe nie eine Dokumentation gefunden, die dies besagt.

1
Chris Jackson

idk Wenn Sie immer noch nach einer Antwort suchen, aber ich bin auf dasselbe Problem gestoßen wie Sie. Der Schlüssel zum Erfolg war das Entfernen des @section @endsection-Teils in Ihrer Teilansicht

0
Vishal Desai

entfernen Sie diese if-Bedingung und prüfen Sie, ob sie funktioniert

if(Request::isMethod('post') && Request::ajax()) {
0
Paris Paraskeva

Ich habe es ohne diese funktioniert: @section & @stop

<table class="table table-striped">
    <tbody>
@foreach ($userjobs as $userjob)
        <tr>
            <td><strong>{{ $userjob->title }}</strong><br />
            {{ $userjob->description }}
            </td>
        </tr>
@endforeach
</table>

entweder

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

oder dieses

$returnHTML = view('job.userjobs',compact($userjobs))->render();// or method that you prefere to return data + RENDER is the key here`

beide arbeiteten

0
Wahsei

Das hat mir geholfen:

echo view('ajaxView')->with(['value' => 'some value']);

Ich habe echo view ('ajaxView') stattdessen return view ('ajaxView') verwendet.

0
Nole
$view = view("job.userjobs",compact($userjobs))->render();
return response()->json(['html'=>$view]);
0
mohamed