为了账号安全,请及时绑定邮箱和手机立即绑定

未定义的返回值

未定义的返回值

PHP
慕容3067478 2021-06-10 16:33:44
我想使用 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. 更多在这里与异步代码工作。


查看完整回答
反对 回复 2021-06-19
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信