我有一个非常简单的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中它可以正常工作。
答案 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
。