Laravel无法返回true J​​SON响应

Laravel无法返回true J​​SON响应

问题描述:

我有一个很简单的Laravel控制器:Laravel无法返回true J​​SON响应

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

当我尝试打开浏览器中的一个对应的URL(我使用谷歌浏览器),它工作正常。有{"a":"hello"}响应,内容类型为application/json

但是,当我接收通过javascript数据(我用fetch polyfill)我看到内容类型是text/html。我检查了它在GoogleChrome DevTools和我的代码中:

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

    }) 
    .catch(function(error){ 

    }); 

嗯,我得到了错误 - Unexpected token < in JSON at position 0

我完全不明白发生了什么事。

PS

Laravel版本 - 5.4,PHP版本7.0.15,XAMPP 3.2.2

取填充工具的版本 - 2.0.3

谷歌Chrome浏览器版本 - 57.0.2987.133

是的,这听起来很奇怪,但在MS Edge v.20.10240,它工作正常。

+0

你看过开发工具,看看请求响应什么?这可能是服务器返回的HTML与数据 –

+0

“我在GoogleChrome DevTools中检查过它” - 内容类型是“text/html”。那么,问题是为什么?它应该是'application/json'。 – Sergey

+0

尝试检查响应是否可用(您之前做过的同样的事情,但应该在响应标签旁边的标题),每当我看到这个错误时,它往往会出于某种原因而从服务器响应html。 –

我使用session AUTH我所有路线试图做到这一点。所以,问题就在那里。 api路线像下面帮我:

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

一个去想。我为here所描述的所有请求添加了api_token

您需要设置json内容类型的请求头。我不知道关于填充工具,但这是我将如何使用jQuery

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

我试图做同样的伎俩。但它没有区别。 – Sergey

+2

你有没有试过用邮递员来打电话? – victor

+1

谢谢@victor!邮差明确表示。我使用身份验证请求的网址。出于某种原因,我在Chrome中的响应中获得了授权页面,但在Edge中没有。无论如何,现在我知道问题所在。 – Sergey