未定义的返回值

我想使用 JS 和 PHP(没有 jquery 或 ajax)从 MySQL 数据库中获取数据,但我一直收到“未定义的返回值错误”。


这是我第一次用 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;

?>


慕容3067478
浏览 139回答 1
1回答

HUWWW

在您的open方法中,您已将第 3 个参数设置为,true因此您request.send将异步执行。与每个异步 JavaScript 一样,当您的代码执行到达时return product product仍然undefined是错误的。您可以将第三个参数设置为false同步,并且您的代码将工作(至少目前在 Firefox 中工作):request.open("GET", url, false);但是,不推荐使用同步选项。来自MDN主线程上的同步请求很容易破坏用户体验,应该避免;事实上,许多浏览器已经完全弃用了主线程上的同步 XHR 支持。Worker 中允许同步请求。至于异步工作,您必须在回调onload方法中使用:request.onload = function () {&nbsp; if (request.status == 200) {&nbsp; &nbsp; product = request.responseText;&nbsp; &nbsp; console.log(product) // consume here&nbsp; }};您也可以使用Promise,可选地与async/await. 更多在这里与异步代码工作。
打开App,查看更多内容
随时随地看视频慕课网APP