了解 JavaScript 回复
Understanding JavaScript responses
我正在使用以下 PHP 代码来响应 JavaScript fetch()
请求。
$json = json_encode(array(
'status' => 200,
'resources' => $dataObj
));
http_response_code(200);
header('Content-Type: application/json');
echo $json;
exit;
返回我的 JavaScript 代码,在收到响应后,我可以执行以下操作:
console.log(response.status);
console.log(response.resources);
console.log(JSON.stringify(response.resources));
第一行有效并显示值 200
。其他行显示undefined
.
现在,如果我在代码前添加 response.json(),所有三个控制台行都会正确显示。
let resp = await response.json();
console.log(resp.status);
console.log(resp.resources);
console.log(JSON.stringify(resp.resources));
我的问题是:为什么在第一个例子中我可以正确看到200的状态,但我需要使用json()函数才能看到数据对象?
响应实际上是一个字符串:
"{'status':200,'resources':'sth'}"
并且该字符串没有 资源 属性。您首先需要将其解析为 object 文字。
澄清一些困惑:
服务器发送一个完整的响应,所以上面的只是 body ,而 http 响应也包含 header。如果你这样做:
response.status
这实际上是 header 的状态。
当您发出 http 请求(任何 http 请求)时,您将获得一个状态代码。这在响应对象上可用。
您还发送了 status
属性 作为响应正文的一部分,直到您明确告诉您的代码将响应正文读取为 json(response.json()
) 您将无法阅读 任何 的自定义回复。
所以,基本上,您可以读取的状态是服务器发回的状态 - 而不是您 json 上的状态。
如果您使用 Fetch API you will always get an object back which you don't need to parse. It's already an object literal, specifically a https://developer.mozilla.org/en-US/docs/Web/API/Response。
此对象有一个名为 status
的 属性,在您的第一种情况下 returns 200。
如果您确实在此对象上调用方法 json()
,它将解析您响应的 正文,而不是整个内容。在这个正文中,你有 你来自后端的状态 而不是 Response
.
的状态
这就是为什么 let resp = await response.json()
将 return 你的实际响应数据与你的 resources
等。
我正在使用以下 PHP 代码来响应 JavaScript fetch()
请求。
$json = json_encode(array(
'status' => 200,
'resources' => $dataObj
));
http_response_code(200);
header('Content-Type: application/json');
echo $json;
exit;
返回我的 JavaScript 代码,在收到响应后,我可以执行以下操作:
console.log(response.status);
console.log(response.resources);
console.log(JSON.stringify(response.resources));
第一行有效并显示值 200
。其他行显示undefined
.
现在,如果我在代码前添加 response.json(),所有三个控制台行都会正确显示。
let resp = await response.json();
console.log(resp.status);
console.log(resp.resources);
console.log(JSON.stringify(resp.resources));
我的问题是:为什么在第一个例子中我可以正确看到200的状态,但我需要使用json()函数才能看到数据对象?
响应实际上是一个字符串:
"{'status':200,'resources':'sth'}"
并且该字符串没有 资源 属性。您首先需要将其解析为 object 文字。
澄清一些困惑:
服务器发送一个完整的响应,所以上面的只是 body ,而 http 响应也包含 header。如果你这样做:
response.status
这实际上是 header 的状态。
当您发出 http 请求(任何 http 请求)时,您将获得一个状态代码。这在响应对象上可用。
您还发送了 status
属性 作为响应正文的一部分,直到您明确告诉您的代码将响应正文读取为 json(response.json()
) 您将无法阅读 任何 的自定义回复。
所以,基本上,您可以读取的状态是服务器发回的状态 - 而不是您 json 上的状态。
如果您使用 Fetch API you will always get an object back which you don't need to parse. It's already an object literal, specifically a https://developer.mozilla.org/en-US/docs/Web/API/Response。
此对象有一个名为 status
的 属性,在您的第一种情况下 returns 200。
如果您确实在此对象上调用方法 json()
,它将解析您响应的 正文,而不是整个内容。在这个正文中,你有 你来自后端的状态 而不是 Response
.
这就是为什么 let resp = await response.json()
将 return 你的实际响应数据与你的 resources
等。