2016-10-30 4 views
0

Ich benutze Laravel 5.1. Ich versuche, einige Daten im JSON-Format über den Controller zu bekommen, aber es gibt HTML statt JSON zurück.Warum JSON html zurückgeben

create.blade.php

{!! Form::open(['url' => 'schedule']) !!} 

@include('schedule.form',['submitButtonText'=>'Submit']) 
{!! Form::close() !!} 

edit.blade.php

{!! Form::model($schedule,['method'=>'PATCH','url' => 'schedule/'. $schedule->scheduleID ]) !!} 
    @include('schedule.form',['submitButtonText'=>'Update']) 

    {!! Form::close() !!} 

Ajax in schedule.form

$.post('../schedule/loadRoute',{routeID:routeID},function(r){ 
     console.log(r); 
     $.each(JSON.parse(r), function(key, value){ 

       coordinates.push(new google.maps.LatLng(value.lat,value.lon)); 
       if(value.is_station==1){ 
        addMarker(new google.maps.LatLng(value.lat,value.lon),value.name); 
       } 

     }); 

     clearMap(); 

    }); 

loadRoute Funktion in der Steuerung

public function loadRoute(Request $request){ 

    $routeID=$request->get('routeID'); 



    $station=Station::where('route_id',$routeID)->get()->toArray(); 


    echo json_encode($station); 

} 

bearbeiten

routes.php

Route::group(
    ['middleware' => ['web']], 
    function() { 
     Route::auth(); 

     Route::get('schedule/getScheduleByRouteID/{routeID}', '[email protected]'); 

     Route::resource('schedule', 'ScheduleController', ['except' => ['destroy', 'show']]); 

      Route::post('schedule/loadRoute','[email protected]'); 
}); 

Beide erstellen und bearbeiten Seite die gleiche schedule.form, aber die JSON-Daten zurückgegeben wird erfolgreich in Seite erstellen nur, es bearbeiten Seite zurückzukehren html anstelle von JSON, und ich bekomme diesen Fehler in der Konsole (Uncaught SyntaxError: Unerwartete Token < in JSON an der Position 0)

Beide Seite mit dem gleichen Formular, aber warum es nicht funktioniert, wenn kommt, Seite zu bearbeiten?

+2

Wahrscheinlich, weil der Server HTML wegen irgendeines Serverfehlers zurückbringt, oder es wirklich das tun sollte und Sie falsch darauf zugreifen – Tibrogargan

+0

Ist der 'Ajax in schedule.form' Abschnitt in einer Klingeldatei oder in einer Javascriptakte? –

+0

es ist in der Klinge Datei Skript Abschnitt –

Antwort

2

Ich würde mir vorstellen, einer der Gründe, warum Sie das sehen, ist, weil Sie loadRoute Route unter der resource Route sind.

Versuchen Sie, um die Bestellung zu ändern:

Route::get('schedule/getScheduleByRouteID/{routeID}', '[email protected]'); 

Route::post('schedule/loadRoute','[email protected]'); 

Route::resource('schedule', 'ScheduleController', ['except' => ['destroy', 'show']]); 

https://laravel.com/docs/5.2/controllers#restful-supplementing-resource-controllers

Auch Sie sollten return von einem Controller nicht echo:

public function loadRoute(Request $request) 
{ 
    return Station::where('route_id', $request->get('routeID'))->get(); 
} 

In der obigen Laravel automatisch json_encode() die Antwort und Fügen Sie die entsprechenden Header hinzu.

Mit Ihrem $.post Anruf würde ich es wie folgt ändern:

$.post('{{ url('schedule/loadRoute') }}', {routeID: routeID, _token: '{{ csrf_token() }}'}, function (r) { 
    console.log(r); 

    $.each(r, function (key, value) { 

     coordinates.push(new google.maps.LatLng(value.lat, value.lon)); 
     if (value.is_station == 1) { 
      addMarker(new google.maps.LatLng(value.lat, value.lon), value.name); 
     } 

    }); 

    clearMap(); 

}, 'json'); 

Dies liegt daran, Laravel wird nun eine richtige json Reaktion mit den richtigen Header zurückkehren, so dass Sie nicht zu JSON.parse() es brauchen sollten. Außerdem scheinen Sie die csrf_token nicht zu liefern, so dass sie auch zum Datenobjekt hinzugefügt wurde.

Hoffe, das hilft!

+0

Wow, danke! Das hat mein Problem gelöst. Vergessen zu erwähnen, ich habe den Header und das Token hinzugefügt

Verwandte Themen