【发布时间】:2020-12-28 11:02:00
【问题描述】:
这是使用 jquery 从 mysql 检索数据的正确方法吗? php 端工作正常($data 打印到页面上)但 jquery 似乎根本没有接收到变量。
除此之外,有没有办法让 jquery 函数在页面之后和谷歌地图 initMap() 函数完成加载后运行?是否可以在标准 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>
我尝试过的 js/admin.js
$(document).ready(function() {
$.ajax({
url: '../admin.php',
method: 'post',
dataType: 'json',
success: function(data) {
console.log(data);
}
})
});
我在控制台中收到“404 Not found”错误
【问题讨论】:
-
您正在使用数据库中的数据生成地图?您不需要在此处使用 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 请求的警告同样适用 -
@ProfessorAbronsius 感谢您的提醒!这听起来更有效率。我应该如何传递变量?
标签: javascript php jquery google-maps