将数据从mysql传递到javascript

将数据从mysql传递到javascript,javascript,php,jquery,google-maps,Javascript,Php,Jquery,Google Maps,这是使用jquery从mysql检索数据的正确方法吗?php端工作正常(数据打印到页面上),但jquery似乎根本没有收到变量 除此之外,有没有办法让jquery函数在页面和GoogleMapsInitMap()函数完成加载后运行?是否可以在标准javascript函数中包含jquery代码 admin.php <?php require 'private/database.php'; $sql = "SELECT * FROM latlng"; $result =

这是使用jquery从mysql检索数据的正确方法吗?php端工作正常(数据打印到页面上),但jquery似乎根本没有收到变量

除此之外,有没有办法让jquery函数在页面和GoogleMapsInitMap()函数完成加载后运行?是否可以在标准javascript函数中包含jquery代码

admin.php

<?php
require 'private/database.php';

$sql = "SELECT * FROM latlng";
$result = mysqli_query($conn, $sql);

$data = array();
if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {
        $data[] = $row;
    }
}
echo json_encode($data);

?><!DOCTYPE html>
<html>
  <head>
    <link type="text/css" rel="stylesheet" href="css/admin.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/admin.js"></script>
    <script type="text/javascript" src="js/maps.js"></script>
    <script defer 
      src="https://maps.googleapis.com/maps/api/js?key=(mykey)&callback=initMap&libraries=places&v=weekly"
    ></script>
  </head>
  <body>
    <div id="map"></div><br>
  </body>
</html>

我在控制台中收到一个“404未找到”错误。404错误表明您在jQuery代码中使用了错误的URL来获取数据。尝试输入URL参数的文件名和整个URL

除了通过jQuery获取数据的问题外,直接在浏览器中打开admin.php会发生什么?你得到$data和你的HTML代码了吗?如果是这种情况,我建议您将整个PHP代码包装在一个If语句中:

if($_SERVER['REQUEST_METHOD'] === 'POST'){
    header('Content-Type: application/json');
    require 'private/database.php';

    $sql = "SELECT * FROM latlng";
    $result = mysqli_query($conn, $sql);

    $data = array();
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $data[] = $row;
        }
    }
    die(json_encode($data));
}
else{ ?>
<!DOCTYPE html>
<html>
  <head>
    <link type="text/css" rel="stylesheet" href="css/admin.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/admin.js"></script>
    <script type="text/javascript" src="js/maps.js"></script>
    <script defer 
      src="https://maps.googleapis.com/maps/api/js?key=(mykey)&callback=initMap&libraries=places&v=weekly"
    ></script>
  </head>
  <body>
    <div id="map"></div><br>
  </body>
</html>
<? } ?>
if($\u服务器['REQUEST\u METHOD']='POST'){
标题('Content-Type:application/json');
需要“private/database.php”;
$sql=“从latlng中选择*”;
$result=mysqli\u查询($conn,$sql);
$data=array();
如果(mysqli_num_行($result)>0){
while($row=mysqli\u fetch\u assoc($result)){
$data[]=$row;
}
}
die(json_编码($data));
}
还有{?>

现在,如果是来自js的POST请求,PHP将以JSON的形式返回数据。还将设置正确的标题。如果不是POST请求,PHP将返回HTML


对于您的另一个问题:是的,可以在普通JavaScript函数中使用jQuery。

404错误表明您在jQuery代码中使用了错误的URL来获取数据。请尝试输入URL参数,不仅仅是文件名,还要输入整个URL

除了通过jQuery获取数据的问题外,当您直接在浏览器中打开admin.php时会发生什么?您是否获得$data和HTML代码?如果是这种情况,我建议您将整个php代码封装在If语句中:

if($_SERVER['REQUEST_METHOD'] === 'POST'){
    header('Content-Type: application/json');
    require 'private/database.php';

    $sql = "SELECT * FROM latlng";
    $result = mysqli_query($conn, $sql);

    $data = array();
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $data[] = $row;
        }
    }
    die(json_encode($data));
}
else{ ?>
<!DOCTYPE html>
<html>
  <head>
    <link type="text/css" rel="stylesheet" href="css/admin.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/admin.js"></script>
    <script type="text/javascript" src="js/maps.js"></script>
    <script defer 
      src="https://maps.googleapis.com/maps/api/js?key=(mykey)&callback=initMap&libraries=places&v=weekly"
    ></script>
  </head>
  <body>
    <div id="map"></div><br>
  </body>
</html>
<? } ?>
if($\u服务器['REQUEST\u METHOD']='POST'){
标题('Content-Type:application/json');
需要“private/database.php”;
$sql=“从latlng中选择*”;
$result=mysqli\u查询($conn,$sql);
$data=array();
如果(mysqli_num_行($result)>0){
while($row=mysqli\u fetch\u assoc($result)){
$data[]=$row;
}
}
die(json_编码($data));
}
还有{?>

现在,如果是来自js的POST请求,PHP将以JSON的形式返回数据。还将设置正确的标题。如果不是POST请求,PHP将返回HTML


对于您的另一个问题:是的,可以在普通JavaScript函数中使用jQuery。

您正在使用数据库中的数据生成一个映射?您不需要在这里使用ajax(只需使用PHP数据创建一个js变量)但是,如果你决定使用ajax,你必须只发回数据,而不是整个页面,就像上面所说的那样在该块中处理db查询-并使用
exit
die
发送数据,以在
initMap
函数运行后获得要运行的ajax请求-在末尾从
initMap
中调用它如果您得到404,那么您添加了错误的URL。而不是使用相对路径,比如
。/admin.php
,改用绝对路径。
url:'/path/to/admin.php'
。当使用
/
启动路径时,它将来自文档根目录。相对路径的问题是,它们与您所在的页面相对,而不是与实际文件位置相对。正如您看起来要定位(或试图定位)的那样与地图显示的页面相同,您可以选择使用
location.href
而不是
。/admin.php
,这应该是可以的。向同一页面发送ajax请求的相同注意事项也适用though@ProfessorAbronsius谢谢你的提醒!听起来效率更高。我该如何通过考试呢变量?您正在使用数据库中的数据生成一个映射?您不需要在这里使用ajax(只需使用PHP数据创建一个js变量),但是如果您确实决定使用ajax,则必须只发回数据,而不是上面显示的整个页面。使用逻辑测试检查您是否有POST请求(来自ajax请求)在该块中处理db查询-并使用
exit
die
发送数据,以在
initMap
函数运行后获得要运行的ajax请求-在末尾从
initMap
中调用它如果您得到404,那么您添加了错误的URL。而不是使用相对路径,比如
。/admin.php
,改用绝对路径。
url:'/path/to/admin.php'
。当使用
/
启动路径时,它将来自文档根目录。相对路径的问题是,它们与您所在的页面相对,而不是与实际文件位置相对。正如您看起来要定位(或试图定位)的那样与地图显示的页面相同,您可以选择使用
location.href
而不是
。/admin.php
,这应该是可以的。向同一页面发送ajax请求的相同注意事项也适用though@ProfessorAbronsius谢谢你的提醒!听起来效率更高。我该如何通过考试呢变量?谢谢!404错误消失了,但出现了另一个错误:“JSON.parse:JSON数据第1行第146列的JSON数据后出现意外的非空白字符”。这是指什么?我没有使用JSON.parse()Hmm。尝试使用die(JSON_encode($data)而不是echo JSON_encode($data)。谢谢!404错误消失了,但出现了另一个错误:“JSON.parse:意外的否