2013-01-07 76 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