使用Jquery AJAX

时间:2015-12-05 10:43:40

标签: javascript jquery ajax api

我尝试使用他们的API和Ajax访问地质网站数据以从中检索。



var location;
var titleName;
$(document).ready(function() {
  $('#earthquakes').click(function() {

    function getQuakes() {
      $.ajax({
        url: "http://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2014-01-01&endtime=2014-01-02",
        function(data) {
          $.each(data.features, function(key, val) {
            var coord = val.geometry.coordinates;
            location = {
              lat: coord[0],
              lng: coord[1]
            };
            titleName = val.properties.title;
          });
        }
      });
    }
    console.log(location);
    console.log(titleName);
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button" id="earthquakes">Click me</button>
&#13;
&#13;
&#13;

在结果中,当我点击&#34;地震&#34;按钮,它记录两行:

  

&#34;位置{hash:&#34;&#34;,搜索:&#34;&#34;,路径名:&#34; /&#34;,端口:&#34; 8888& #34 ;,   主机名:&#34; localhost&#34; ...}&#34;

  

未定义

我似乎用我的功能定位了正确的参数,但是,它仍然没有得到我需要的数据。这里仅供参考,是他们的文档:http://earthquake.usgs.gov/fdsnws/event/1/ 但我相信问题可能是其他问题,我可能会对变量及其使用方式做错。

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试访问AJAX成功回调之外的那些变量。请记住,AJAX是异步的,因此这个回调可以在比console.log语句更晚的时间执行。因此,基本上如果要检索这些值,最好的位置是在成功回调中,并且不要在外部作用域中声明这两个变量。

还要记住你有一个JSON数组而不仅仅是一个地震数据(不幸的是)。所以将这些结果存储在javascript数组变量中:

$(document).ready(function() {
    $('#earthquakes').click(function () {
        function getQuakes(callback) {
            $.ajax({
                url: "http://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2014-01-01&endtime=2015-01-02",
                function(data) {
                    var results = [];
                    $.each(data.features, function(key, val) {
                        var coord = val.geometry.coordinates;
                        var titleName = val.properties.title;
                        var quakeData = {
                            location: {
                                lat: coord[0],
                                lng: coord[1]
                            },
                            title: titleName
                        };

                        results.push(quakeData);
                    });

                    // Invoke the callback and pass it the results array
                    callback(results);
                }
            });
        }

        // Now call the getQuakes function and pass it a callback that
        // will be passed as argument the result array
        getQuakes(function(data) {
            // At this stage the result variable will contain an array
            // of javascript objects with location and title properties that
            // we constructed in our AJAX success callback. So here we can
            // do something with those results, like dumping them to the console
            console.log(data);
        });
    });
});

显然在这个例子中我们没有处理来自AJAX调用的错误事件,这是你可能想要做的事情,这样你就可以在从远程服务器检索这些信息时通知用户出现了问题。 / p>

答案 1 :(得分:-1)

尝试以下代码 -

    var location;
    var titleName;
    $(document).ready(function() {
     $('#earthquakes').click(function (){
     $.ajax({
        url: "http://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2014-01-01&endtime=2015-01-02",
        function(data){
        $.each(data.features, function(key, val) {
                var coord = val.geometry.coordinates;
                location = {
                    lat: coord[0],
                    lng: coord[1]
                };
                 titleName = val.properties.title;
            });        
          }
       });
       console.log(location);
       console.log(titleName);
      });
     });