2017-04-05 4 views
1

ich einen ganz einfachen Laravel Controller habe:Laravel kann nicht return true json Antwort

class MyController extends Controller 
{ 
    public function list() 
    { 
     return response()->json(['a' => 'hello']); 
    } 
} 

Wenn ich versuche, eine entsprechende URL in Browser zu öffnen (ich benutze Google Chrome) es funktioniert gut. Es gibt {"a":"hello"} Antwort und Inhaltstyp ist application/json.

Aber wenn ich Daten über Javascript (ich benutze fetch polyfill) ich sehe, dass Inhaltstyp ist text/html. Ich habe es in Googlechrome DevTools und in meinen Code:

fetch("/list") 
    .then(function(response) { 
     console.log(response.headers.get('Content-Type')); // => 'text/html' 
     return response.json(); 
    }) 
    .then(function(json) { 

    }) 
    .catch(function(error){ 

    }); 

Nun, ich den Fehler haben - Unexpected token < in JSON at position 0.

Ich verstehe völlig nicht, was passiert ist.

PS:

Laravel Version - 5.4, PHP Version 7.0.15, 3.2.2 XAMPP

polyfill Version Fetch - 2.0.3

Google Chrome-Version - 57.0.2987.133

Und ja, es klingt seltsam, aber in MS Edge V.20.10240 funktioniert es gut.

+0

Haben Sie sich die Dev-Tools angesehen, um zu sehen, worauf die Anfrage reagiert? Es ist möglich, dass der Server HTML mit den Daten –

+0

"Ich habe es in GoogleChrome DevTools überprüft" zurückgibt - Inhaltstyp ist 'text/html'. Also, die Frage ist warum? Es sollte "Anwendung/Json" sein. – Sergey

+0

versuchen, die Antwort zu überprüfen, wenn es verfügbar ist (gleiche Sache, die Sie zuvor getan haben, aber es sollte eine Antwort Registerkarte neben der Kopfzeile sein), wenn ich diesen Fehler sehe, neigt es aus dem Server zu reagieren mit HTML aus irgendeinem Grund –

Antwort

0

ich für alle meine Routen die session Auth versucht mit. Also, das Problem war da. api Routen wie helfen Sie mir unter:

Route::middleware('auth:api')->get('/list', '[email protected]'); 

Eine weitere denken. Ich habe api_token für alle meine Anfragen wie beschrieben here hinzugefügt.

0

Sie müssen den Header Ihrer Anfrage mit Inhaltstyp von JSON festlegen. Ich weiß nicht, über polyfill aber das ist, wie ich es mit jquery tun würde

$.ajax({ 
       type: 'GET', 
       url: url, 
       contentType: 'application/json; charset=utf-8', 
       success: 
       error: 
      }); 
+0

Ich habe versucht, den gleichen Trick zu machen. Aber es macht keinen Unterschied. – Sergey

+2

haben Sie versucht, mit etwas wie Postman zu telefonieren? – victor

+1

Danke @victor! Postbote macht es klar. Ich benutze Auth für die angeforderte URL. Und aus irgendeinem Grund habe ich eine Autorisierungsseite als Antwort in Chrome, aber nicht in Edge. Wie auch immer, jetzt weiß ich, wo das Problem ist. – Sergey