2

savedataに問題があります...データがデータベースに保存され、マップにも表示されるため、基本的にすべてが機能していますが、マーカーのアドレスと名前を保存してから[保存]ボタンをクリックすると閉められない…

downloadUrl(url, function(data, responseCode) {
if (responseCode == 200 && data.length <= 1) {
  infowindow.close();
  document.getElementById("message").innerHTML = "Location added.";
}

downloadUrlから始めて何か悪いことがあります。コードが無視されているように見えるので、ユーザーに保存されたことを知らせるアラートを出しました。

役立つ場合は、JavaScript全体をコピーします(ジオコーダーとスタイル付きマップも含まれます):必要に応じて、マップまたは必要なものへのリンクを提供できます。

var marker;
var infowindow;
var geocoder;
var map;

function initialize() {
  geocoder = new google.maps.Geocoder();

var styles = [
{
  "stylers": [
  { "hue": "#0055ff" },
  { "saturation": 90 },
  { "gamma": 0.39 },
  { "lightness": 48 },
  { "visibility": "on" },
  { "invert_lightness": true }
 ]
 },{
"featureType": "road",
"stylers": [
  { "hue": "#ff4500" }
]
},{
"elementType": "labels",
"stylers": [
  { "hue": "#00ff6f" },
  { "gamma": 6.31 },
  { "weight": 0.2 }
]
}
];

var SajatMap = new google.maps.StyledMapType(styles,
{name: "Saját Map"});


  var image=new google.maps.MarkerImage('resistance2.png',
  new google.maps.Size(23, 30),
  new google.maps.Point(0,0),
  new google.maps.Point(0, 32));

  var latlng = new google.maps.LatLng(47.495632, 19.044748);
    var options = {
      center: latlng,
      zoom: 12,
      mapTypeControlOptions: {
      mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'sajat_map']
      }
    };
  map = new google.maps.Map(document.getElementById("map"), options);

  var infoWindow = new google.maps.InfoWindow();

map.mapTypes.set('sajat_map', SajatMap);
map.setMapTypeId('sajat_map');

var html = "<table>" +
             "<tr><td>Név:</td> <td><input type='text' id='name'/> </td> </tr>" +
             "<tr><td>Hely:</td> <td><input type='text' id='address'/></td> </tr>" +
             "<tr><td></td><td><input id='save' type='button' value='Mentés'    onclick='saveData()'/></td></tr>";
infowindow = new google.maps.InfoWindow({
 content: html
});


google.maps.event.addListener(map, "click", function(event) {
    marker = new google.maps.Marker({
      position: event.latLng,
      map: map
    });
    google.maps.event.addListener(marker, "click", function() {
      infowindow.open(map, marker);
    });
});

  downloadUrl("phpsqlajax_genxml.php", function(data) {
    var xml = data.responseXML;
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
      var name = markers[i].getAttribute("name");
      var address = markers[i].getAttribute("address");
      var point = new google.maps.LatLng(
          parseFloat(markers[i].getAttribute("lat")),
          parseFloat(markers[i].getAttribute("lng")));
      var html = "<b>" + name + "</b> <br/>" + address;
      marker = new google.maps.Marker({
        map: map,
        icon:image,
        position: point
      });
      bindInfoWindow(marker, map, infoWindow, html);
    }
  });     
}

function bindInfoWindow(marker, map, infoWindow, html) {
  google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(html);
    infoWindow.open(map, marker);
  });
}

  function saveData() {
  var name = escape(document.getElementById("name").value);
  var address = escape(document.getElementById("address").value);
  var latlng = marker.getPosition();

  var url = "phpsqlinfo_addrow.php?name=" + name + "&address=" + address +
            "&lat=" + latlng.lat() + "&lng=" + latlng.lng();
            alert('Successfully saved!');
  downloadUrl(url, function(data, responseCode) {
    if (responseCode == 200 && data.length <= 1) {
      infowindow.close();
      document.getElementById("message").innerHTML = "Location added.";
    }
  });
 }

function codeAddress() {
var address = document.getElementById("kereso").value;
geocoder.geocode( { 'address': address}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location
    });
  } else {
    alert("Sikertelen. A probléma oka: " + status);
  }
});
}

function downloadUrl(url, callback) {
  var request = window.ActiveXObject ?
      new ActiveXObject('Microsoft.XMLHTTP') :
      new XMLHttpRequest;

  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      callback(request, request.status);
    }
  };

  request.open('GET', url, true);
  request.send(null);
}

function doNothing() {}
4

2 に答える 2

2

あなたはダイアログが閉じないと言います、それは私に条件が

responseCode == 200 && data.length <= 1

来ていfalseます。

これはおそらく、サーバーから返される応答に複数の文字が含まれているためdata.length <= 1ですfalse(その条件はtrue、長さが1、0、または負のメッセージのみであるため)。応答に最大1バイトのコンテンツが含まれていることを確認します。

おそらく、あなたは実際に空でないメッセージ、すなわち、をテストすることを意図していましたdata.length >= 1現在、1バイト以下の応答に対してのみクローズを許可しています。あなたは本当に1バイト以上のメッセージのクローズを許可したかったと思います

于 2013-01-07T17:57:24.560 に答える
2

この質問は古いですが、同じ問題を探しに来て、答えを見つけたので、他の人に役立つかもしれません。

あなたのコードはおそらくhttps://developers.google.com/maps/articles/phpsqlinfo_v3から来ています

そこにそれは使用の説明として言いますif (responseCode == 200 && data.length <= 1)

  • 返されたステータスコードが200であることを確認します。これは、ファイルが正常に取得され、処理を続行できることを意味します。
  • 返されたデータ文字列の長さを確認してください。空のデータファイルは、リクエストがエラー文字列を生成しなかったことを示します。長さがゼロの場合は、情報ウィンドウを閉じて成功メッセージを出力できます。

dataあなたがそこからログインdownloadUrl(url, function(data, responseCode) {すると、彼らがそこで間違いを犯したことがわかります:

オブジェクトをログに記録すると、次のようになりdataます。XMLHttpRequest {statusText: "OK", status: 200, response: "", responseType: "", responseXML: null…}

彼らが意味しているように私には思えますresponse: "":エラーがある場合、それはそこに入るでしょう。したがって、の場合data.response.length < 1、エラーがないことを意味します。

私はJavascriptにまったく慣れていないので、間違っている場合は修正してください。

  downloadUrl(url, function(data, responseCode) {
    if (responseCode == 200 && data.response.length <= 1) {
      infowindow.close();
      document.getElementById("message").innerHTML = "Location added.";
    }
  });
于 2013-08-05T21:34:43.873 に答える