当在php控制器上调用fetch时,它在json()上失败

cmssoen2  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(102)

我在ReactJS中遇到了这样的错误:

VM345:1 Uncaught (in promise) SyntaxError: Unexpected end of JSON input

简短总结:我有php控制器与删除结束点-下面的一段代码.

php代码

header("Content-Type: application/json; charset=UTF-8");    
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header("Access-Control-Allow-Headers: *");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    error_log('green options');
    return;
}

if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {

    http_response_code(204);   //http code for DELETE 
    // http_response_code(404);
    $jsonData = json_encode([
        "message" => "Product not found"
    ]);
    error_log($jsonData);
    print $jsonData;

}

然后我通过下面的代码从reactJS调用这个端点,但是它在这个我无法理解的错误上失败了。任何其他端点(GET、POST)都按预期工作。也许它与OPTIONS方法有某种关系,因为它只在OPTIONS方法的情况下传递。
编辑:有没有办法从Chrome debug中检查它?当我只调试响应变量时,我不可能看到任何内容。谢谢

react代码

const requestOptions = {
    method: 'DELETE',
    mode: 'cors',
};
fetch(URL + id, requestOptions).then(response => {
    return response.json(); //here it fails
}).then(data => {
    console.log(data);
});

编辑:

编辑:
Chrome -网络-开发者工具

oewdyzsn

oewdyzsn1#

我最终发现这个问题与返回的HTTP代码204有关。当我把它改为200时,它工作得很好。我不知道为什么它会引起这种问题,但事实就是这样。
有什么线索吗?
http代码200或204可以用于标识“资源被删除”。HTTP status code for update and delete?

相关问题