我想使用JS和PHP从MySQL数据库中获取数据(没有jquery或ajax) 但是我一直收到“未定义的返回值错误”。
这是我第一次使用JS和PHP编程。
url: "../PHP/Kassensystem.php?productname="+productname
JS:
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;
?>
答案 0 :(得分:0)
在您的open
方法中,您将第3个参数设置为true
,因此您的request.send
将被异步执行。与所有异步JavaScript一样,到您的代码执行到达return product
product
时,仍然是undefined
,因此出现错误。
您可以将第三个参数设置为false
以使其同步,并且您的代码可以正常工作(到目前为止,至少在Firefox中工作):
request.open("GET", url, false);
但是不建议使用sync选项。来自MDN
主线程上的同步请求很容易破坏用户体验,应该避免;实际上,许多浏览器已完全弃用主线程上的同步XHR支持。允许在Worker中进行同步请求。
对于异步工作,您必须在onload
方法的回调中使用:
request.onload = function () {
if (request.status == 200) {
product = request.responseText;
console.log(product) // consume here
}
};
您还可以将Promise
与async/await
一起使用。更多here可用于异步代码。