Post请求在postman中工作,但在javascript获取函数中不工作

Post请求在postman中工作,但在javascript获取函数中不工作,javascript,php,rest,ecmascript-6,cors,Javascript,Php,Rest,Ecmascript 6,Cors,我以为我以前已经解决了这个问题,并且能够使用fetch向本地托管的apache服务器发出成功的post请求,但今天我尝试发出post,再次出现“cors飞行前请求失败”错误。我不知道为什么它以前能用,为什么突然又不能用了 这是我3天前工作的php文件头- header('Access-Control-Allow-Origin: *'); header('Content-Type: application/json'); header('Access-Control-Allow-Metho

我以为我以前已经解决了这个问题,并且能够使用fetch向本地托管的apache服务器发出成功的post请求,但今天我尝试发出post,再次出现“cors飞行前请求失败”错误。我不知道为什么它以前能用,为什么突然又不能用了

这是我3天前工作的php文件头-

header('Access-Control-Allow-Origin: *');
  header('Content-Type: application/json');
  header('Access-Control-Allow-Methods: POST, OPTIONS');
  header('Access-Control-Allow-Headers: Access-Control-Allow-Headers,Content-Type,Access-Control-Allow-Methods, 
  Authorization, X-Requested-With');
这是我在上面使用的获取请求-

fetch("http://menu.com/menu/api/post/create.php", {
  method: "POST",
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },

  body: JSON.stringify({
    'title' : 'qweqweqw',
    'body' : '1111w',
    'author' : '2222r',
    'category_id' : '2'
  })
})
.then( (response) => { 
   console.log(response);
});
以下是有效的邮递员代码:

POST /menu/api/post/create.php HTTP/1.1
Host: menu.com
Content-Type: application/json
cache-control: no-cache
Postman-Token: 83a8e0d1-f45a-4184-92f6-f0be2f8fcf5f
{
    "title" : "new new title",
    "body" : "new neqwsadasssssssssseqweqwew jew",
    "author" : "new newzxxxxxxxxxxxxwq author",
    "category_id" : "1"
}------WebKitFormBoundary7MA4YWxkTrZu0gW--
我很感激你能帮我做这件事

编辑-

以下是cors错误:

Access to fetch at 'http://menu.com/menu/api/post/create.php' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

在我的apache服务器错误日志中,我得到了以下PHP致命错误:未捕获PDOException:SQLSTATE[HY000]:常规错误:1366不正确的整数值:“/home/orphe$”中第1行的“category_id”列为“”,,但我不确定为什么它会为category_id获取此值,因为我复制/粘贴了来自postman的工作请求,但它仍然不工作。

有一个飞行前请求(带有选项),但服务器没有返回HTTP 200 OK。 尝试将以下内容添加到
create.php

header("HTTP/1.1 200 OK");

如果这不起作用,请还包括请求和响应头。

有一个飞行前请求(带有选项),但服务器没有返回HTTP 200 OK。 尝试将以下内容添加到
create.php

header("HTTP/1.1 200 OK");

如果这不起作用,请还包括请求和响应标题。

将我的获取请求标题更改为
标题:新标题()
修复了所有问题。

将我的获取请求标题更改为
标题:新标题()
修复了所有问题。

请包括您在浏览器控制台中看到的CORS错误目标url不是活动的您收到的响应来自浏览器自动执行的CORS飞行前选项请求。浏览器甚至都不会尝试您的POST请求,因为该选项请求失败。因此,要在Postman中重现错误,您需要发送一个选项请求,而不是POST请求。@sideshowbarker它仍然可以在Postman中处理选项请求,仅从该请求中获得200 OK响应。add标头('Access-Control-Allow-Methods:POST,OPTIONS,FETCH');,允许访问时提取允许控制。上一次我这样做了,它工作了。请包括您在浏览器控制台中看到的CORS错误目标url不是活动的您得到的响应来自浏览器自动执行的CORS飞行前选项请求。浏览器甚至都不会尝试您的POST请求,因为该选项请求失败。因此,要在Postman中重现错误,您需要发送一个选项请求,而不是POST请求。@sideshowbarker它仍然可以在Postman中处理选项请求,仅从该请求中获得200 OK响应。add标头('Access-Control-Allow-Methods:POST,OPTIONS,FETCH');,允许访问时提取允许控制。上次我这么做了,它成功了。这不起作用,我得到了同样的错误。我真的不在乎这是一个post请求还是我只想发送数据的选项。我和邮递员一起发送,效果很好,但由于某种原因,当我发送与邮递员中完全相同的对象时,我的获取请求一直失败。这不起作用,我收到了相同的错误。我真的不在乎这是一个post请求还是我只想发送数据的选项。我将它与postman一起发送,它工作正常,但由于某种原因,当我发送与postman中完全相同的对象时,我的获取请求一直失败。。