0

我正在尝试创建一个网页,该网页通过文本框获取位置,并在谷歌地图上绘制该位置附近的所有最近地震。

我正在使用 Dreamweaver 调试我的代码,当我使用它包含的内置实时网页功能时,该网页可以完美运行。

但是,当我在浏览器中打开保存的文件时,我得到的只是一个错误"Geocode was not successful for the following reason: ERROR"。这对于找出问题所在并没有多大帮助,而且我对网络语言和开发网站的经验也很少。

您可以借给我的任何帮助或见解将不胜感激。


代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0; padding: 0 }
      #map-canvas { height: 100% }
    </style>
    <script type="text/javascript"
      src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXX&sensor=true">
    </script>

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
   <script type="text/javascript">
      var geocoder;
      var map;
      function initialize() {
        geocoder = new google.maps.Geocoder();
        var mapOptions = {
          center: new google.maps.LatLng(-34.397, 150.644),
          zoom: 8,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map-canvas"),
            mapOptions);
      }


        function codeAddress() 
        {
            var loc = document.getElementById('locText').value;

            geocoder.geocode( { 'address': loc}, function(results, status) 
            {
                if (status == google.maps.GeocoderStatus.OK) 
                {
                    map.setCenter(results[0].geometry.location);

                    var north = results[0].geometry.location.lat() + 1;
                    var south = results[0].geometry.location.lat() - 1;
                    var east  = results[0].geometry.location.lng() + 1;
                    var west  = results[0].geometry.location.lng() - 1;

                    var url;

                    url = 'http://api.geonames.org/earthquakesJSON?north=' + north + '&south=' + south + '&east=' + east + '&west=' + west + '&username=jpcguy89';

                    $.ajax(url,function(quakes)
                    {
                        $.each(quakes.earthquakes, function(k, aQuake){

                            var contentString = '<div id="content">' + '<p><b>ID:</b> ' + aQuake.eqid + '</p>' + '<p><b>Magnitude:</b> ' + aQuake.magnitude + '<p><b>Date:</b> ' + aQuake.datetime + '<p><b>Depth:</b> ' + aQuake.depth + '</div>';

                            var infowindow = new google.maps.InfoWindow
                            ({
                                 content: contentString
                            });

                            var latLng = new google.maps.LatLng(aQuake.lat,aQuake.lng);

                            var marker = new google.maps.Marker
                            ({
                                position: latLng,
                                map: map,
                                title: 'Earthquake (' + aQuake.eqid + ')'
                            });


                            google.maps.event.addListener(marker, 'click', function() 
                            {
                                infowindow.open(map,marker);
                            }); 
                        });     
                    });
                }

                else 
                {
                    alert('Geocode was not successful for the following reason: ' + status);
                }
            });
        }

      google.maps.event.addDomListener(window, 'load', initialize);

</script>

</head>
<body>
<br />
<br />
<div id="test"></div>
<br />
<br />

<form id="geonamesFetch">
    City/Location: <input type="text" id="locText" />
    <input type="submit" id="submit" onclick="codeAddress()" />
</form>
<div id="map-canvas"/>
<p>&nbsp;</p>
<p>&nbsp;</p>

</body>
</html>

http://jsfiddle.net/mZGL3/

4

2 回答 2

1

您正在 HTML 中绑定点击处理程序:

<input type="submit" id="submit" onclick="codeAddress()" />

通过这种方式,JavaScript 被执行,但随后表单被立即提交。您需要阻止表单提交。从 html 中删除点击处理程序:

<input type="submit" id="submit" />

并绑定到 JavaScript 中的提交处理程序,以便您可以阻止表单提交。将此添加到您的 JavaScript:

$(function(){
    $("#geonamesFetch").on("submit", function(e) {
        e.preventDefault();
        codeAddress();
    });
});

演示:jsfiddle.net/mZGL3/3/

编辑:您遇到的另一个问题是您对$.ajax(). 该方法需要一个对象,但您正在传递一个函数。您可以更改代码以传递对象,将您现在拥有的函数设置为success属性:

$.ajax(url, {
    success: function(quakes) {
        ...
    }
});

或者使用$.get(),它接受一个函数作为第二个参数:

$.get(url, function (quakes) {
    ...
});

演示:jsfiddle.net/mZGL3/4/

于 2013-09-30T19:54:37.160 回答
0

您似乎正在加载混合协议资源。

而且您的 jsFiddle 似乎缺少资源(http://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXX&sensor=true

修复您的代码以访问非 https .. 并重试。

在您的 jsFiddle 上看到:

> Timestamp: 9/30/2013 3:40:41 PM Error: ReferenceError: google is not
> defined Source File: fiddle.jshell.net/mZGL3/show Line: 93

我在这里用资源更新了你的小提琴,现在,错误是:{“错误”:“请使用 POST 请求”}

于 2013-09-30T19:42:45.650 回答