React调用PHP接口报错:Unexpected token h in JSON at position 0
解决React fetch请求PHP返回纯文本导致的JSON解析错误
你遇到的问题很典型——你的PHP输出的是普通字符串,但React里却尝试把它当作JSON来解析,这就直接导致了解析失败。
具体来说,你的PHP代码输出的是hello world这个纯文本,而response.json()方法要求响应内容必须是符合JSON语法格式的数据。纯文本的第一个字符是'h',完全不符合JSON的结构规则(JSON要么是对象{}、数组[],要么是带引号的字符串),所以浏览器抛出了那个语法错误。
这里有两种清晰的解决思路,选哪种都可以:
方法一:让PHP输出标准的JSON格式(推荐)
这种方式更符合前后端交互的规范,也方便以后传递更复杂的数据(比如数组、对象)。只需要修改你的PHP代码,加上JSON格式的响应头,并用json_encode()把字符串转成JSON格式:
<?php header('Access-Control-Allow-Origin: http://localhost:3000'); // 告诉前端这是JSON格式的响应 header('Content-Type: application/json'); $string = 'hello world'; // 将字符串编码为JSON格式输出 echo json_encode($string); ?>
修改后,React里的response.json()就能正常解析,console.log(responseJson)会输出"hello world"(带引号的JSON字符串)。
方法二:修改React的解析方式为纯文本
如果你不想改动PHP代码,也可以把React里的解析方法从response.json()换成response.text(),直接获取纯文本内容:
componentDidMount(){ fetch('http://localhost/finaldemo.php') .then((response) => response.text()) // 替换成text()方法 .then((responseText) => { console.log(responseText); // 这里会直接输出hello world }) .catch(error => console.error('请求出错:', error)); // 建议加上catch捕获错误,避免未处理的rejection }
另外别忘了加上.catch()处理可能的请求错误,这样就不会再出现"Unhandled Rejection"的警告了。
内容的提问来源于stack exchange,提问作者Nello
相关产品推荐
相关产品推荐

