0

我对javascript很陌生(好吧,我只花了两天时间使用它!)。我想在我的网站上做的一件事是允许用户向谷歌地图添加标记。过去几天我一直在阅读 googlemaps API,并使用了其中一个教程(https://developers.google.com/maps/articles/phpsqlinfo_v3)并根据我的需要对其进行了编辑。标记的纬度和经度使用 javascript 传递到 SQL 数据库中。查数据库的时候,可以看到已经添加了标记,这很好,但是从用户端无法知道它是否成功。当我点击“提交”按钮时,数据被传递到数据库中,但我想重定向到另一个页面,或者显示一条消息它已经成功。

代码是:

var marker;

function initialize() {
  var latlng = new google.maps.LatLng(37.4419, -122.1419);
  var options = {
    zoom: 13,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), options);

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

  function saveData() {
  var latlng = marker.getPosition();

  var url = "phpsqlinfo_addrow.php?lng=" + latlng.lng() + "&lat=" + latlng.lat();

  downloadUrl(url, function(data, responseCode) {
       if (responseCode == 200 && data.length <= 1) {
     window.navigate('index.html')
    }
  });
}

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.responseText, request.status);
    }
  };

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

function doNothing() {}
</script>

<link rel="stylesheet" type="text/css" href="style.css"/>
<body onload="initialize()">
<div id="container">
<div id="map_canvas" style="width: 938px; height: 600px">
</div>
</div>
<div id="footer">
<table>
<tr><td><input type='button' value='Save Marker' onclick='saveData()'/></td></tr>
</div>
</body>
</html>

我从那里删除了一些不必要的东西。问题似乎出在“window.navigate”部分,但大量搜索并没有让我更进一步。

任何帮助表示赞赏!

4

3 回答 3

0

如果标记被成功添加(在 phpsqlinfo_addrow.php 中),你应该做的是返回一个成功代码,如下所示:

if(mysql_query("INSERT INTO .....")){
    //Success
    echo 1;
} else{
    //Failed
    echo 2;
}

然后在您的 ajax 调用中,您可以检查它是否已成功添加,如下所示:

request.onreadystatechange = function() {
    if (request.readyState == 4) {
        request.onreadystatechange = doNothing;

        var response = request.responseText;

        if(response == 1){
            //success
            callback(request.responseText, request.status);
        } else{
            //failed
            alert('something went wrong!');
        }
    }
};
于 2012-04-16T14:56:52.810 回答
0

1)您在行尾缺少一个分号

window.navigate('index.html')

所以改成:

window.navigate("index.html"); 

注意分号的添加。

2)改用它,因为它适用于所有浏览器:

window.location.href = '...';

无论如何,首先要做的是检查您的 if 语句是否正在执行。因此,将某些内容打印到浏览器而不是重定向到另一个页面。如果什么都没有打印,那么你就知道你的 if 语句甚至没有被执行。然后你可以做的是检查需要执行 if 语句的变量。因此,您可以在测试 if 语句并查看条件是否为真之前将数据变量打印到浏览器。在您的情况下, data.length 需要<1 ...因此在之前打印出 data 变量并确保它小于一...如果不是,那么您知道为什么您的 if 语句没有被执行,因此知道为什么您的网页没有被重定向!

于 2012-04-16T15:02:43.183 回答
0

按照 Terwanerik 的回答:

downloadUrl(url, function(data, responseCode) {
    if (responseCode == 200 && data == "1") {
        //success
        window.navigate('index.html')
    } else{
        //failed
        alert('something went wrong!');
    }
  }
});

您应该更改 phpsqlinfo_addrow.php 文件以匹配他所说的:

if(mysql_query("INSERT INTO .....")){
  //Success
  echo 1;
} else{
  //Failed
  echo 2;
}
于 2012-04-16T15:07:11.800 回答