2016-02-06 80 views
-1

我的代碼是基於谷歌代碼的示例: https://developers.google.com/maps/articles/phpsqlinfo_v3 並且工作正常。谷歌地圖downloadUrl不返回200

我需要將以前的'gid'(整數)字段更改爲'id'(字符串)以保存到數據庫並用於在地圖上顯示新的標記符號。

奇怪的是,構建在調用addrow.php文件的代碼中的url是可以的。當我用alert(url)捕獲這個字符串時,我手動使用這個字符串,新的數據被添加到數據庫中。

在我的腳本,調用似乎失敗(responseCode == 200 & & data.length < = 1),因爲沒有數據寫入到數據庫,並從「else從句」警報顯示爲短彈出。

下面是我在項目中使用的代碼(將數據從一個形式保存):

//save new marker to Postgis-database and add new markerwithlabel on the fly 
function saveData(){ 
    var gender = escape(document.getElementById("gender").value); 
    var hoehe = InZahl(document.getElementById("hoehe").value); 
    var breite = InZahl(document.getElementById("breite").value); 
    var id = escape(document.getElementById("id").value); 
    var vital = document.getElementById("vital").value; 
    var typ = document.getElementById("typ").value; 
    var ein_mehr = document.getElementById("ein_mehr").value; 
    var st_durchm = document.getElementById("st_durchm").value; 
    var frucht = document.getElementById("frucht").value; 
    var anmerk = document.getElementById("anmerk").value; 
    var latlng = marker.getPosition(); 

    var url = "./mapdata/addrow.php?gender=" + gender + 
     "&hoehe=" + hoehe + "&lat=" + latlng.lat() + "&lng=" + latlng.lng() + 
     "&breite=" + breite + "&id=" + id + "&typ=" + typ + "&ein_mehr=" +ein_mehr + "&st_durchm=" + st_durchm + 
     "&frucht=" + frucht + 
     "&vital=" + vital + "&anmerk=" + anmerk; 

    downloadUrl(url, function (data, responseCode) { 
     if (responseCode == 200 && data.length <=1) { 
      infowindow.close(); 
      marker.setDraggable(false); 
      marker.setIcon('./images/mm_purple.png'); 
      marker.labelContent = id; 
      marker.setMap(map); 

      downloadUrl("./mapdata/getxml_get_last.php", function (data1) { 
      var xml = parseXml(data1); 
      var ms = xml.documentElement.getElementsByTagName("m"); 
      var gid = ms[0].getAttribute("gid"); 

      var html_n = "<div id='InfoWindow'><p style='font-weight:bold;'>" + id + "</p> \n\<p>Höhe:" + hoehe + " Breite: "+ breite + 
      "<br />\n\Typ: "+typ+" Stämme: "+ein_mehr+" St-Durchm: "+ st_durchm + "<br />\n\Vitalität: "+vital+" Fruchtbehang: "+frucht+ 
      "<p/>\n\<p style='text-align:right;'><a href='sm_juniperus.php?operation=ssearch&ResetFilter=0&SearchField=gid&FilterType=%3D&FilterText="+ gid + 
      "' target='_blank'> Daten editieren </a></p></div>"; 

      infowindow.setContent(html_n); 
      bindInfoWindow(marker, map, infowindow, html_n); 

      (function(i, marker, gid) {  
       var origIcon = marker.getIcon(); 
       new LongPress(marker, 1000); 
       google.maps.event.addListener(marker, 'longpress', function(e) { 
        marker.setDraggable(true); 
        marker.setIcon(mmcross); 
       });   
       google.maps.event.addListener(marker, 'dragend', function(){ 
        updatePosition(marker, gid); 
        marker.setIcon(origIcon); 
       });   
      })(i,marker,gid); 

      //add new marker to markerCluster-Array and to markerArray 
      markerCluster.addMarker(marker,false); 
      markerArray.push(marker); 
      i++; 

      }); // End add new marker 
     } 
     else { 
      alert("Your data couldn't be saved!"); 
     }   
    }); // End downloadUrl 
}; // END saveData() 

正如我所說的,我的代碼工作正常,但之後經過3個晚上來解決這個問題,我認爲這會請時間尋求幫助。 如果有人有一個想法,錯誤在哪裏,我會apreciate任何提示。

回答

0

只是爲了確認,你知道,你做你說

if (responseCode == 200 && data.length <=1) {

「如果請求是成功的,它返回的數據只有一個字符以下長度」?我不確定這是否有意,因爲這樣if語句中的代碼只在響應成功但只包含1或0個字符時才運行。

+0

我承認,從現在開始,我沒有想到第二個條件'data.length <= 1'。但是,將數據添加到數據庫的php腳本不會返回任何字符串,除非發生錯誤。所以這將滿足上述條件。我測試了代碼沒有第二個條件(只有'esponseCode == 200'),但行爲仍然是相同的。 – geom

+0

Firebug告訴我,'downloadUrl(url,function,data,responseCode)'-call不返回200(並且沒有任何內容插入到數據庫中),這非常奇怪,當我在瀏覽器中插入GET字符串時手動將數據插入數據庫中? – geom

+0

由於您在瀏覽器中顯式調用了數據庫,而不是通過腳本,數據將不會存儲在數據庫中。返回的錯誤代碼是什麼? – adjuremods