【发布时间】:2018-04-20 23:36:18
【问题描述】:
为了描述我的问题,我写了 3 个简单的脚本:
- index.php(启动会话并显示 html 链接);
- index.js(包含链接点击处理程序,从 fetch.php 获取数据);
- fetch.php(启动会话,发送响应)。
当我点击一个链接时,javascript 会向 fetch.php 发送一个请求。据我了解,cookie 也会发送,因为指定了“同源”。我期待在响应 session_id 中看到,但响应会在 7-9 秒后出现,并带有消息 Failed to load response data。为什么会发生?
PS。如果我从 fetch.php 中删除 session_start() 行,响应会立即返回。
PSS。如果我用 jQuery.post 替换 fetch,响应也会立即返回。
index.php
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>test</title>
</head>
<body>
<a href="/">request</a>
<script src="/index.js"></script>
</body>
</html>
index.js
let a = document.querySelector('a');
a.addEventListener('click', (e) => {
e.preventDefault();
fetch('/fetch.php', {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
credentials: 'same-origin',
body: JSON.stringify({
data: 'data',
}),
}).then((response) => {
console.log('Success');
}).catch((errors) => {
console.log('Error');
});
});
fetch.php
<?php
session_start();
header('HTTP/1.1 200 Ok', true, 200);
header('Content-Type: application/json');
echo json_encode(array(
'id' => session_id(),
));
?>
【问题讨论】:
-
你数组中的逗号不会报错吗?
-
@Mouser 不,脚本不会抛出任何错误。
-
检查你的服务器错误日志,你的脚本可能会出错,因此不会打印任何东西,否则你至少应该得到一些 json 打印输出
-
输出
data时在控制台看到什么 -
@Mouser 要检查来自 fetch.php 的响应,我正在使用 Chrome 开发人员工具,在响应选项卡中我什么也看不到(它是空的)。仅在 session_start() 问题中,如果我将其从脚本中删除,则响应正确发送。
标签: javascript php fetch-api