Laravel无法回复真正的json响应

时间:2017-04-05 20:39:46

标签: javascript json laravel laravel-5 fetch-api

我有一个非常简单的Laravel控制器:

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

当我尝试在浏览器中打开相应的网址时(我使用谷歌浏览器),它可以正常工作。有{"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

获取polyfill版本 - 2.0.3

Google Chrome版本 - 57.0.2987.133

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

2 个答案:

答案 0 :(得分:0)

您需要设置内容类型为json的请求标头。我不知道polyfill,但这是我用jquery

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

答案 1 :(得分:0)

我尝试将session身份验证用于我的所有路线。所以,问题出在那里。 以下api路线可以帮助我:

Route::middleware('auth:api')->get('/list', 'ApiController@list');

还有一个想法。我为replace所述的所有请求添加了api_token