PHP DPO Json 未在 React Native 中显示
PHP PDO Json doesnt show in React Native
我正在尝试学习 React Native,并从在简单的应用程序视图中简单获取一些数据开始。
我的服务器上有一个 php 文件,其中 return Json 中的一些数据(它是一个包含 3 个 Objs 的数组)
如果我回显 php 文件,我会得到一个有效的 Json 格式,并且可以在浏览器上看到所有数据。
但是如果我尝试通过 React Native 获取数据,我会得到一个空白页面。
这是我的 PHP 文件
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");
header("Content-Type: application/json");
try {
$dbh = new PDO('mysql:host=foo', $user, $pass,
[PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]
);
$query = "SELECT * FROM wochenplan_aufräumen";
$stmt = $dbh->prepare($query);
$result = array();
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);
return json_encode($result);
} catch (PDOException $e) {
echo "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
这是我的这是我的 React 本机组件
const App = () => {
const [isLoading, setLoading] = useState(true);
const [data, setData] = useState([]);
useEffect(() => {
fetch('foo.php', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then((response) => response.json)
.then((json) => setData(json.id))
.catch((error) => console.error(error))
.finally(() => setLoading(false));
}, []);
console.log(data);
return (
<View style={{ flex: 1, padding: 24 }}>
{isLoading ? <ActivityIndicator/> : (
<FlatList
data={data}
keyExtractor={({ id }, index) => id}
renderItem={({ item }) => (
<Text>{item.crdate}, {item.crdate}</Text>
)}
/>
)}
</View>
);
}
非常奇怪的是console.log(data);给我一个空数组,另外 2 个未定义
使用 fetch,您可以通过调用响应的 json()
方法来解析对 json 的响应。
fetch (/* ... */)
.then(response => response.json()) // here
.then(json => {})
我认为您的 json-响应中有一些字符与 json-格式不兼容。检查前后是否有换行符或空格。
如果您不使用函数或 class-方法,请删除 php 代码中的 return json_encode(...)
行。
在学习 react-native 的同时享受乐趣 ;)
我正在尝试学习 React Native,并从在简单的应用程序视图中简单获取一些数据开始。 我的服务器上有一个 php 文件,其中 return Json 中的一些数据(它是一个包含 3 个 Objs 的数组)
如果我回显 php 文件,我会得到一个有效的 Json 格式,并且可以在浏览器上看到所有数据。
但是如果我尝试通过 React Native 获取数据,我会得到一个空白页面。
这是我的 PHP 文件
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");
header("Content-Type: application/json");
try {
$dbh = new PDO('mysql:host=foo', $user, $pass,
[PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]
);
$query = "SELECT * FROM wochenplan_aufräumen";
$stmt = $dbh->prepare($query);
$result = array();
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);
return json_encode($result);
} catch (PDOException $e) {
echo "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
这是我的这是我的 React 本机组件
const App = () => {
const [isLoading, setLoading] = useState(true);
const [data, setData] = useState([]);
useEffect(() => {
fetch('foo.php', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then((response) => response.json)
.then((json) => setData(json.id))
.catch((error) => console.error(error))
.finally(() => setLoading(false));
}, []);
console.log(data);
return (
<View style={{ flex: 1, padding: 24 }}>
{isLoading ? <ActivityIndicator/> : (
<FlatList
data={data}
keyExtractor={({ id }, index) => id}
renderItem={({ item }) => (
<Text>{item.crdate}, {item.crdate}</Text>
)}
/>
)}
</View>
);
}
非常奇怪的是console.log(data);给我一个空数组,另外 2 个未定义
使用 fetch,您可以通过调用响应的 json()
方法来解析对 json 的响应。
fetch (/* ... */)
.then(response => response.json()) // here
.then(json => {})
我认为您的 json-响应中有一些字符与 json-格式不兼容。检查前后是否有换行符或空格。
如果您不使用函数或 class-方法,请删除 php 代码中的 return json_encode(...)
行。
在学习 react-native 的同时享受乐趣 ;)