2016-03-25 8 views
-1

Google Map API ile çalışıyorum, çalıştığı tek bir konumla karşılaştığımda, konum (adres & latlng) içeren ayrı bir veritabanı (mysql) tutuyorum. Haritaya bir işaretçi yerleştirmek için birden fazla konum var, google dev aracı uncaught Range error: maximum call stack size exceeded diyor. Tüm kaynakları interweb'de denedim, tüm sonuçlar negatif.aralık hatası: google map api'de maksimum çağrı yığını boyutu aşıldı

$(document).ready(function(){ 
      $("#searchbutton").click(function(){ 
       var category = document.getElementById("categoryinput").value; 
       var place = document.getElementById("placeinput").value; 
       $("#mapcontainer").css("display","block"); 
       $.get("http://localhost:80/rule/search.php?category="+category+"&place="+place, function(data){ 
        $("#hiddeninput").val(data); 
        //Initialize the Google Maps 
        var geocoder; 
        var map; 
        var markersArray = []; 
        var infos = []; 
        geocoder = new google.maps.Geocoder(); 
        var myOptions = { 
          mapTypeId: google.maps.MapTypeId.ROADMAP, 
          zoom: 9 
         }; 
        //Load the Map into the map_canvas div 
        var map = new google.maps.Map(document.getElementById("mapcontainer"), myOptions); 
        map = new google.maps.Map(document.getElementById("mapcontainer"), myOptions); 

        //Initialize a variable that the auto-size the map to whatever you are plotting 
        var bounds = new google.maps.LatLngBounds(); 
        //Initialize the encoded string  
        var encodedString; 
        //Initialize the array that will hold the contents of the split string 
        var stringArray = []; 
        //Get the value of the encoded string from the hidden input 
        encodedString = document.getElementById("hiddeninput").value; 
        //Split the encoded string into an array the separates each location 
        stringArray = encodedString.split("****"); 

        var x; 
        for (x = 0; x < stringArray.length; x = x + 1) 
        { 
         var addressDetails = []; 
         var markericon = 'img/mapmarker.png'; 
         var marker; 
         //Separate each field 
         addressDetails = stringArray[x].split("&&&"); 
         //Load the lat, long data 
         var lat = new google.maps.LatLng(addressDetails[1], addressDetails[2]); 
         //Create a new marker and info window 
         marker = new google.maps.Marker({ 
          map: map, 
          position: lat, 
          animation: google.maps.Animation.DROP, 
          //Content is what will show up in the info window 
          content: addressDetails[0], 
          icon: markericon 
         }); 
         //Pushing the markers into an array so that it's easier to manage them 
         markersArray.push(marker); 
         google.maps.event.addListener(marker, 'click', function() { 
          closeInfos(); 
          var info = new google.maps.InfoWindow({content: this.content}); 
          //On click the map will load the info window 
          info.open(map,this); 
          infos[0]=info; 
         }); 
         //Extends the boundaries of the map to include this new location 
         bounds.extend(lat); 
        } 
        //Takes all the lat, longs in the bounds variable and autosizes the map 
        map.fitBounds(bounds); 

        //Manages the info windows 
        function closeInfos(){ 
        if(infos.length > 0){ 
         infos[0].set("marker",null); 
         infos[0].close(); 
         infos.length = 0; 
         } 
        } 
       }); 
      }); 
     }); 

bu kod

<?php 

header('Access-Control-Allow-Origin:*'); 

//create connection to database MYSQL 

mysql_connect('localhost','root',''); 
mysql_select_db('locations') or exit('no db found'); 

$category = $_GET['category']; 
$place = $_GET['place']; 



if(empty($category) && empty($place)){ 
    echo "invalid input"; 
} 
else{ 

    $searchquery ="SELECT * FROM `locationDatabase` WHERE `category`='$category'and `nagar`='$place' or `area`='$place'"; 
    $searchqueryexecute = mysql_query($searchquery); 
    while($rows = mysql_fetch_assoc($searchqueryexecute)) { 
     # code... 

     $encodedstring = ""; 
     $x = 0; 


     if($x == 0){ 
      $seperator = ""; 
     } 
     else{ 
      $seperator = "****"; 
     } 
     $encodedstring = $encodedstring.$seperator. 
     "<p class='info'><b>".$rows['name']. 
     "</b><br><b>".$rows['door_no']. 
     "</b><br><b>".$rows['street']. 
     "</b><br><b>".$rows['nagar']. 
     "</b><br><b>".$rows['area']. 
     "</b><br><b>".$rows['city']."-".$rows['zipcode']. 
     "</b></p>&&&".$rows['latitude']."&&&".$rows['longitude']; 
     $x = $x + 1; 

     echo $encodedstring;  
    } 

} 

?> 
+0

veri birden noktaları için nasıl gözüküyor:

PHP olması gerektiği gibi (o tamamlandığında sadece çıkışa dize echo) görünüyor? – geocodezip

+0

Gönderilen kod bildirilen hatayı göstermiyor (en azından beklediğim verileri sağladığımda) – geocodezip

+0

Hata her şeyi söylüyor. Ya bir yığın taşması yaratan ya da verileriniz çok büyük olan ve aynı şeylere neden olan birçok işlevi çağrıştıran sonsuz bir döngü oluşturan bir hata var. Eski durumda, hatayı düzeltin ve devam edin. İkincisi ise, çağrıların olay döngüsü tarafından tetiklenmesine izin vermek için setTimeout çağırarak kodu yeniden yazmaya çalışın. – Will

cevap

0

Kodunuz veri dizisinin sonuna "****" ekstra ekliyordur jquery ajax isteği gönderir. Bu, haritaya eklenecek fazladan boş bir noktaya neden olur ve bu da sınırları geçersiz kılar. Verilerin ucundan "****" ekstra

if (isNaN(addressDetails[1]) || isNaN(addressDetails[2])) { 
    alert("invalid data point:"+x+" ("+addressDetails[1]+","+addressDetails[2]+")"); 
    continue; 
} 

Ya kaldırın: Ya makinesi oluşturmadan önce hata denetimi ekleyin.

$encodedstring = ""; 
$x = 0; 
while($rows = mysql_fetch_assoc($searchqueryexecute)) { 
    # code... 

    if($x == 0){ 
     $seperator = ""; 
    } 
    else{ 
     $seperator = "****"; 
    } 
    $encodedstring = $encodedstring.$seperator. 
    "<p class='info'><b>".$rows['name']. 
    "</b><br><b>".$rows['door_no']. 
    "</b><br><b>".$rows['street']. 
    "</b><br><b>".$rows['nagar']. 
    "</b><br><b>".$rows['area']. 
    "</b><br><b>".$rows['city']."-".$rows['zipcode']. 
    "</b></p>&&&".$rows['latitude']."&&&".$rows['longitude']; 
    $x = $x + 1; 

} 
echo $encodedstring;