地图标记的JavaScript/PHP查询

地图标记的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

我正在将一个工作的交互式Google Maps V2迁移到V3,其中web用户通过一个表单字段提供邮政编码,该表单字段调用一个javascript函数,该函数通过PHP脚本在数据库上运行查询。PHP脚本应该返回jscript数组

当调用jscript函数时(单击表单按钮),什么都没有发生。或者PHP脚本没有按预期返回jscript数组

错误控制台不报告任何错误,firebug按预期显示函数和数组变量,但数组变量为空

有人谁已经实现了搜索功能V3看看我在做什么,并给出一些建议?提前感谢:

来自html

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.