javascript - 刷新页面中的 PHP 函数
问题描述
我在 PHP 中有一个函数,它从我的数据库中获取所有“标记”,这些标记被加载到谷歌地图上。
我在同一页面上还有一个 AJAX 表单,它允许用户向数据库添加更多“标记”。
我希望这样当提交 AJAX 表单时,标记会立即显示在地图上。
目前的问题是 PHP 只在页面加载时呈现一次,所以如果我想查看更新的标记,那么我必须手动重新加载页面。
有没有我可以分配给我的 AJAX 提交按钮的函数来刷新我页面中的 PHP?
<?php $markerArray = getMarkers();
$allMarkers = array();
for($x=0; $x<sizeof($markerArray); $x++)
{
array_push($allMarkers,$markerArray[$x]['json']);
}
$allMarkersJson = json_encode($allMarkers, JSON_UNESCAPED_SLASHES); ?>
<script>
var allMarkers = <?php echo $allMarkersJson ?>;
var markerMap = allMarkers.map(function(e) {
return JSON.parse(e);
});
for(x=0;x<markerMap.length;x++){
var thisMarker = markerMap[x];
var marker = new google.maps.Marker({
position: thisMarker.geometry.location,
title:"this is marker " + x
});
$("#saveToDatabase").click(function(){
var bounds = new google.maps.LatLngBounds();
var place = searchBox.getPlaces();
var locationJson = JSON.stringify(place[0]);
$.ajax({
type: "POST",
url: "insertLocation.php",
dataType:"json",
data: {
locationJson : locationJson
},
cache: false,
success: function(result){
window.alert("successful upload!");
}});
});
</script>
解决方案
当然,PHP 确实有这样的功能,但是您需要以这种方式稍微更改代码:
1. 在 php 中创建某处
public function getMarkersJSON(){
$markerArray = getMarkers();
$allMarkers = array();
foreach($markerArray as $value){
$allMarkers[] = array_pop($markerArray)['json'];
}
return json_encode($allMarkers, JSON_UNESCAPED_SLASHES);
}
2.在java脚本部分将你的初始化代码包装成函数
var allMarkers = <?= getMarkersJSON() ?>;
function initMap(allMarkers){
var markerMap = allMarkers.map(function(e) {
return JSON.parse(e);
});
for(x=0;x<markerMap.length;x++){
var thisMarker = markerMap[x];
var marker = new google.maps.Marker({
position: thisMarker.geometry.location,
title:"this is marker " + x
});
}
3.接下来在文件准备好时调用这个函数
$(function(){
initMap(allMarkers);
});
4. 现在,在您发布位置后,向服务器端的某个东西发出 ajax 请求,返回函数 getMarkersJSON() 的结果。然后用响应调用你的 JS 函数 initMap()。
initMap([...your respose...])
这是你问题的答案,蝙蝠对我来说,你不需要这些东西。
您已经将您的点发布到服务器,您无需担心在重新加载时丢失数据。因此,您无需从服务器更新所有地图点,只需添加一个新点,或使用客户端已有的数据刷新孔地图。就在您制作和 AJAX 发布之后,使用最近发布的数据更新客户端地图。只需将发送的位置添加到您的地图或根据需要将其删除,具体取决于客户端操作。
推荐阅读
- javascript - 如何将数组中某个键的值设置为另一个数组中的键?
- c++ - 无法打印完整的二叉搜索树,因为我从最低节点向后迭代的逻辑有缺陷
- r - Blogdown 没有以正确的顺序呈现数字列表
- rust - 统一 futures::future::map::Map 和 futures::future::result_::FutureResult
- java - 从 Spring Boot 执行 Neo4j 密码查询
- java - 使用 Selenium 单例驱动程序类是常见的做法吗?
- java - 每个 JVM 实例的 Java 最大速度是否达到 4Gbps 左右?
- mysql - 紧凑():未定义的变量:用户
- r - 使用 dplyr 将 hpfilter 应用于具有 NA 的分组变量
- c - C函数多重定义错误但声明一次?