XMLHttpRequest.responseText 未呈现 json 编码输出

XMLHttpRequest.responseText is not rendering the json encoded output

我的 $request->generate( 'web_notifier' ) 生成了 link:

header( 'Content-Type: application/json' );

# Die is used to ensure nothing else is being outputted further down the script

die( json_encode ( array(
    'session' => array(
        'token' => $request->session( 'crsf_token' )
    )
) ) );

当我访问这个 API link 时,我得到了这个输出(我可以看到 header 中的 Content-Type 设置为 application/json:

{"session":{"token":"3d096c30a00da9ab37019122622dac80edec6db0cf006d5f4450ecd8d813c692"}}

但是,如果我现在尝试使用 XMLHttpRequest 查看 session.token,如下所示,我会得到 Cannot read property 'token' of undefined,这告诉我它没有被呈现为 JSON.

let req = new XMLHttpRequest();
req.onload = () => {
    console.log(req.responseText.session.token);
    console.log(req.responseText['session']['token']);
};
req.open( 'GET', '{{$request->generate( 'web_notifier' )}}' );
req.send();

我做了一个 console.log(req.responseText) 并且可以看到它是字符串格式 - 如果我正确指定了 Content-Type 并使用了 json_encode() 为什么会这样?我该如何解决这个问题?

json 解析不是自动的,您需要将您的响应传递给 JSON.parse(str),我还建议您使用 fetch 而不是 XMLHttpRequest,它具有内置转换。

fetch(url).then(res => res.json()).then(handler)

jsonString = '{"data": "some_data"}'
console.log(JSON.parse(jsonString))