2013-01-07 77 views
2

我有一个savedata的问题...它将数据保存到数据库,并且它也显示在地图上,所以基本上所有的东西都在工作,但是当我保存地址和名称时标记,然后点击保存按钮,我不能关闭它...如果语句被忽略,Maps API savedata函数

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

有来自downloadUrl坏事出发,似乎代码恰恰忽略了,因此我把警报,让用户知道它被保存了。

我复制整个JavaScript,如果它有帮助(它还包括geocoder和风格的地图): 如果你想我可以给你一个链接到地图或任何你需要的。

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() {} 
+0

我不知道谷歌地图API的非常好,但什么是'data.length <= 1'条件?为什么要检查1个字符或0个字符长度的消息? – apsillers

+0

您是否确实指'data.length> = 1',或者是否存在多个数据字符表示某种错误? – apsillers

回答

2

这个问题是旧的,但我来寻找同样的问题,我找到了答案,所以它可能帮助别人。

您的代码可能来自https://developers.google.com/maps/articles/phpsqlinfo_v3

在那里,它说,作为使用if (responseCode == 200 && data.length <= 1)的解释:

  • 检查返回的状态代码是200。这意味着该文件已成功检索我们可以继续处理。
  • 检查返回的数据字符串的长度 - 一个空的数据文件表明该请求不会生成错误字符串。如果长度为零,则可以关闭信息窗口并输出成功消息。

如果从downloadUrl(url, function(data, responseCode) {登录data你会看到他们犯了一个错误有:

记录的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."; 
    } 
    }); 
+0

有同样的问题...我改变了“data.response.length”,但没有任何区别。我删除它,它的工作。或者如果我将其更改为data.length> 1请参阅下一个答案。 – user2060451

2

你说的对话框不紧密,这表明,我认为条件

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

快到了false

这可能是因为你从服务器返回的响应具有一个以上的字符,所以data.length <= 1false(因为条件true只为一个,零或负长度消息)。验证您的回复最多只有一个字节的内容。

也许你实际上是想测试非空消息,即data.length >= 1。现在您只允许关闭一个字节或更短的响应;我猜测,你真的想允许对消息的接近,是一个字节或更长

+1

我现在将它设置为data.length> = 1,但它不工作,所以我删除它,并且只剩下respsonceCode == 200,现在它关闭了窗口。 – Phoenixy

+2

但是,如果你改变data.lenght> 1它的作品。 – user2060451