我想使用 JS 和 PHP(没有 jquery 或 ajax)从 MySQL 数据库中获取数据,但我一直收到“未定义的返回值错误”。这是我第一次用 JS 和 PHP 编程。url: "../PHP/Kassensystem.php?productname="+productnameJS:function getProduct(url) {let product;var request = new XMLHttpRequest();request.open("GET", url, true);request.onload = function () { if (request.status == 200) { product = request.responseText; }};request.send(null);return product;}PHP:<?php$productname = $_GET['productname'];$servername = 'localhost';$username = 'root';$password = '';$dbname = 'allgolddb';$conn = mysqli_connect($servername, $username, $password, $dbname);$prodctInfos = array();$sql = "SELECT * FROM products WHERE name = '$productname'";$result = mysqli_query($conn, $sql);while ($row = mysqli_fetch_assoc($result)) { $prodctInfos[] = $row;}$json_array = json_encode($prodctInfos);return $json_array;?>
1 回答
HUWWW
TA贡献1874条经验 获得超12个赞
在您的open方法中,您已将第 3 个参数设置为,true因此您request.send将异步执行。与每个异步 JavaScript 一样,当您的代码执行到达时return product product仍然undefined是错误的。
您可以将第三个参数设置为false同步,并且您的代码将工作(至少目前在 Firefox 中工作):
request.open("GET", url, false);
但是,不推荐使用同步选项。来自MDN
主线程上的同步请求很容易破坏用户体验,应该避免;事实上,许多浏览器已经完全弃用了主线程上的同步 XHR 支持。Worker 中允许同步请求。
至于异步工作,您必须在回调onload方法中使用:
request.onload = function () {
if (request.status == 200) {
product = request.responseText;
console.log(product) // consume here
}
};
您也可以使用Promise,可选地与async/await. 更多在这里与异步代码工作。
- 1 回答
- 0 关注
- 138 浏览
添加回答
举报
0/150
提交
取消