地图标记的JavaScript/PHP查询
我正在将一个工作的交互式Google Maps V2迁移到V3,其中web用户通过一个表单字段提供邮政编码,该表单字段调用一个javascript函数,该函数通过PHP脚本在数据库上运行查询。PHP脚本应该返回jscript数组 当调用jscript函数时(单击表单按钮),什么都没有发生。或者PHP脚本没有按预期返回jscript数组 错误控制台不报告任何错误,firebug按预期显示函数和数组变量,但数组变量为空 有人谁已经实现了搜索功能V3看看我在做什么,并给出一些建议?提前感谢: 来自html地图标记的JavaScript/PHP查询,php,javascript,google-maps,Php,Javascript,Google Maps,我正在将一个工作的交互式Google Maps V2迁移到V3,其中web用户通过一个表单字段提供邮政编码,该表单字段调用一个javascript函数,该函数通过PHP脚本在数据库上运行查询。PHP脚本应该返回jscript数组 当调用jscript函数时(单击表单按钮),什么都没有发生。或者PHP脚本没有按预期返回jscript数组 错误控制台不报告任何错误,firebug按预期显示函数和数组变量,但数组变量为空 有人谁已经实现了搜索功能V3看看我在做什么,并给出一些建议?提前感谢: 来自ht
Enter Zip Code: <input type="text" id="zip" /><input type="button"
onclick="seachLocationsNear()" value="Search Locations" /></p>
来自php
//query works as expected, returns $result
//http://www.octoberblue.net/eztrip/dbsearch_genArray.php
//using while loop to assign query result to jscript array storeloc
while ($row = @mysql_fetch_assoc($result)){
print "storeloc.push($row['address'],$row['lat'],$row['lng']);";
}
这是完整的javascript
//
var-map=new google.maps.map(document.getElementById(“map\u canvas”),myOptions;
//初始化时调用setMarkers函数
设置标记(地图、storeloc);
}
/*
*定义变量
*storeloc-多维阵列,元素标题[0],纬度[1],液化天然气[2]
*图像-字符串,从父html到图标的相对路径
*infoWindow-obj,包含信息窗口构造函数
*/
//在静态定义数组时按预期工作
/*var storeloc=[
*[4141罗克赛德路七山OH',41.400,-81.663],
*['7515奥本路佩恩斯维尔',41.66,-81.24],
*[特温斯堡奥罗拉路东2496号,41.301218,-81.46940]
* ];
*/
var image='img/maps_logo.png';
var infoWindow=new google.maps.infoWindow({maxWidth:100});
var marker=新数组();
/*
*searchLocationsNear()时动态填充storeloc数组
*函数在单击按钮时调用。
*/
函数searchLocationsNear(zip){
var zipcode=document.getElementById('zip').value;
var storeloc='dbsearch_genArray.php?zip='+zipcode;
}
/*
*使用map和locations参数定义setMarkers函数
*位置包含在初始化块中调用的storeloc多维数组。
*/
功能设置标记(地图、位置){
var i;
对于(i=0;i”+infoContent+”);
信息窗口。打开(标记[n],标记);
}
}
}
/*
*清除标记功能,v3要求开发人员保留
*通过阵列跟踪标记和覆盖。
*/
函数clearMarkers(){
infoWindow.close();
var i;
对于(i=0;i
正如我在评论中所指出的,当storeloc数组是静态定义的时,实现是按预期工作的。但当我尝试通过用户输入动态创建数组时,情况并非如此
提前感谢,,
RWhite35经过漫长而详尽的一周“试错”之后,我终于拥有了我的交互式谷歌地图以及按邮政编码搜索的功能。以下是对上述问题的简短回答 用户通过一个表单输入邮政编码,该表单对客户机存储位置的MySQL数据库运行PHP查询。然后使用JSON(JSON_encode())将PHP数组分配给Javascript数组
/* assume form input/PHP/MySQL query rans as expect, left out for brevity.
* $result is a resource id returned by the query process (class object)
*/
while ($row=@mysql_fetch_assoc($result)){
$arrLocations[] = (
array($row['address'],$row['lat'],$row['lng'])
);
}
// Now use JSON to encode the multidim array for JavaScript
// PHP 5.2 note, must enable in PHP.INI, use cmd line to check: php -i
$arrPassed = json_encode($arrLocations);
?> //duck out of PHP and in to JS
<script type="text/javascript"> var storeloc = <?php echo $arrPassed ?>;</script>
<?php
//continue PHP and clean up any closures, connections etc.
/*假设表单输入/PHP/MySQL查询rans与预期一样,为简洁起见省略。
*$result是查询进程返回的资源id(类对象)
*/
while($row=@mysql\u fetch\u assoc($result)){
$arr[]=(
数组($row['address'],$row['lat'],$row['lng']))
);
}
//现在使用JSON为JavaScript编码多维数组
//PHP5.2注意,必须在PHP.INI中启用,使用cmd行检查:PHP-i
$arrPassed=json_encode($arrPassed);
?>//退出PHP,进入JS
var-storeloc=;
您是否已将查询结果输出到var_dump()中,以确保返回预期结果?lat和long是否为所需格式?数据库中的字符串,但Google正在等待数字?您好,是的,PHP脚本如预期的那样成功。您可以在这里看到输出:当我静态生成storeloc数组时,lat/lng正在工作。断开连接似乎是storeloc在这里解决的问题:var storeloc='dbsearch_genArray.php?zip='+zipcode;我不确定var storeloc是否得到实例化。另外,当我单击表单映射中的按钮并查看fire bug中的DOM时,bug没有显示变量storeloc,错误控制台生成一个错误,称为error:sotreloc not defined,第17行。第17行在初始化代码块中。一个重要的注意事项忘了提到,PHP和JS都在同一个文本文件中。在我的设置中,我将该文件保存为包含Javascript的PHP文件。这也更干净,提供更好的互操作性。
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
// call setMarkers function on initialization
setMarkers(map, storeloc);
}
/*
* Define Variables
* storeloc - multidim array, elements title[0],lat[1],lng[2]
* image - string, relative path (from parent html) to icon
* infoWindow - obj, contains info window constructor
*/
// Works as expected when array is statically defined
/* var storeloc = [
* ['4141 Rockside Rd Seven Hills OH', 41.400, -81.663],
* ['7515 Auburn Road Painesville', 41.66, -81.24],
* ['2496 E Aurora Road Twinsburg', 41.301218, -81.46940]
* ];
*/
var image='img/maps_logo.png';
var infoWindow = new google.maps.InfoWindow({maxWidth:100});
var marker = new Array();
/*
* dynamically populate the storeloc array when searchLocationsNear()
* function is called on button click.
*/
function searchLocationsNear(zip) {
var zipcode = document.getElementById('zip').value;
var storeloc = 'dbsearch_genArray.php?zip=' + zipcode;
}
/*
* Define setMarkers function with map and locations parameters
* locations contain storeloc multidim array, called in initialize block.
*/
function setMarkers(map, locations) {
var i;
for (i = 0; i < locations.length; i++) {
var locate = locations[i];
var myLatLng = new google.maps.LatLng(locate[1], locate[2]);
marker[i] = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image,
title: locate[0]
});
google.maps.event.addListener(marker[i],'click',function(){
markerClick(this);
});
} //close for loop
} //close setMarkers function
/*
* instanciate InfoWindow for each marker
*/
function markerClick(mark){
var n;
for (n=0; n < marker.length; ++n) {
if (marker[n] == mark) {
var infoContent = marker[n].title;
infoWindow.setContent('<p>Store Location Is:<br>' + infoContent + '</p>');
infoWindow.open(marker[n], mark);
}
}
}
/*
* clear markers function, v3 requires the developer to keep
* track of markers and overlays through array.
*/
function clearMarkers() {
infoWindow.close();
var i;
for (i=0; i < markerArray.length; i++) {
markerArray[i].setMap(null);
}
markerArray.length=0;
}
google.maps.event.addDomListener(window,'load',initialize);
//]]>
/* assume form input/PHP/MySQL query rans as expect, left out for brevity.
* $result is a resource id returned by the query process (class object)
*/
while ($row=@mysql_fetch_assoc($result)){
$arrLocations[] = (
array($row['address'],$row['lat'],$row['lng'])
);
}
// Now use JSON to encode the multidim array for JavaScript
// PHP 5.2 note, must enable in PHP.INI, use cmd line to check: php -i
$arrPassed = json_encode($arrLocations);
?> //duck out of PHP and in to JS
<script type="text/javascript"> var storeloc = <?php echo $arrPassed ?>;</script>
<?php
//continue PHP and clean up any closures, connections etc.