Функция onclick кнопки infowindow на карте Google не будет правильно выполнять функцию jquery ajax.ошибка закрытия или объема? - PullRequest
1 голос
/ 27 января 2012

У меня есть база данных, где каждая строка имеет широту / долготу информации для карт с очками. каждый ряд впоследствии превращается в маркер. когда я нажимаю на этот маркер, появляется информационное окно.

Я хочу, чтобы в информационном окне была кнопка, чтобы при нажатии запись из базы данных удалялась. но моя кнопка не сработает. в частности, что-то в функции eraseEntry (), прикрепленной к событию onClick, не работает. когда я нажимаю кнопку, удаляется только последняя запись в базе данных, независимо от того, какой маркер я нажимаю.

var map=//make the google map
var markersArray = [];
var infoWindow = new google.maps.InfoWindow({content: ""});
var markers;

$.get("phpsqlajax_genxml.php", function(data) 
{
    markers = data.documentElement.getElementsByTagName("marker");
    makeMarkersWithXMLinfo(); 
});

function makeMarkersWithXMLinfo() 
{
    for (var i = 0; i < markers.length; i++) 
    {
            var name = markers[i].getAttribute("name");
            var markerLocation = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
            var html = "<b>" + name + "</b> <br/>" + 
                        "</b> <br/>" + "</b> <br/>" +
                        "<input type='button' value='Erase Entry' onclick='eraseEntry()'/>";
            var markerWithLocation = new google.maps.Marker({position: markerLocation, map: map});
            var markerWithInfo = createMarker(markerWithLocation,html);
            eraseEntry = function ()
            {
                    $.get("delete.php", { identifierVar: name } );
            }
    }
}

function createMarker(markerWithLocation, html) {
    var markerWithInfo = google.maps.event.addListener(markerWithLocation, 'click',          function(){infoWindow.setContent(html); infoWindow.open(map,markerWithLocation)});
    return markerWithInfo;
}

Я могу вытащить из базы данных и создать маркеры просто отлично. Я пытался заставить функцию eraseEntry () вызывать другую функцию, которая находится за пределами функции makeMarkersWithXMLinf (), но я все еще получаю ту же проблему. в зависимости от того, где я помещаю / вызываю эти функции, иногда JavaScript даже не думает, что моя функция существует ...

ниже моего файла delete.php

<?php
require("phpsqlajax_dbinfo.php");
// Opens a connection to a MySQL server
$connection = mysql_connect ('localhost', $username, $password);
if (!$connection) {
      die('Not connected : ' . mysql_error());
}
// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
    die ('Can\'t use db : ' . mysql_error());
}

if(isset($_GET['identifierVar']))
{
    $query = 'DELETE FROM markers WHERE name = '.(int)$_GET['identifierVar'];
    $result = mysql_query($query);
}
?>

Я тестировал только с уникальными именами. как 111, 222, 333 .. и т. д. любая помощь приветствуется. спасибо.

1 Ответ

1 голос
/ 27 января 2012
  1. identifierVar должен быть identifierId, где identifierId - это идентификатор этого маркера.попробуйте выполнить эти запросы на удаление с идентификатором, это намного быстрее и уникальное значение.
  2. Ваш запрос, вероятно, выглядит так: delete from x where name = '$name'.вам нужно ограничить до 1, например: delete from x where name = '$name' limit 1
  3. после того, как вы успешно удалили маркер из базы данных, удалите его с карты
  4. всегда используйте firebug в вашей отладке
...