【问题标题】:How to pass JQuery variable to a global one [duplicate]如何将JQuery变量传递给全局变量[重复]
【发布时间】:2015-12-07 09:47:09
【问题描述】:

我正在尝试从 JQuery 函数中检索数据并将其传递给全局变量以与 Google 地图一起使用。这些变量必须保持全局,否则 Google 地图无法使用它们。我设法从 AJAX url 获取我需要的所有数据,它完美地记录但仅在 Jquery 函数内部。如果我将它记录在它之外,它是未定义的。有没有办法将这些值传递给全局变量?

function displayMarkers() {    
    var latlng = new google.maps.LatLng(latitd, longtd);
    var name = titleName;
    createMarker(latlng, name);    
}  

var latitd;
var longtd;
var titleName;       

$(document).ready(function() {
    $('#earthquakes').click(function() {    
        getQuakes();
    });

    function getQuakes() {
        $.ajax({
            url: 'http://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=' + yesterDate + '&endtime=' + displayDate,
            success: function(data) {
                console.log(data);
                $.each(data.features, function(key, val) {
                    var coord = val.geometry.coordinates;
                    locationD = {
                        latd: coord[0],
                        lngd: coord[1]
                    };
                    latitd = locationD.latd;
                    longtd = locationD.lngd;
                    titleName = val.properties.title;

                    console.log(latitd, longtd);
                    console.log(titleName);    
                });
            }    
        });    
    }    
});

【问题讨论】:

  • 把函数定义放在Dom的外面
  • 是的,您访问错误。只有在 ajax 成功后,您才会获得 lat,long 值。然后你在另一个函数中使用这些变量
  • 感谢您对我投反对票,但没有一个“重复”问题与我的问题有关。

标签: javascript jquery ajax api google-maps


【解决方案1】:

你的代码应该是这样的

var latitd;
var longtd;
var titleName;

$(document).ready(function () {
    $('#earthquakes').click(function () {
        getQuakes();
    });
});

function getQuakes() {
    $.ajax({
        url: 'http://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=' + yesterDate + '&endtime=' + displayDate,
        success: function (data) {
            console.log(data);
            $.each(data.features, function (key, val) {
                var coord = val.geometry.coordinates;
                locationD = {
                    latd: coord[0],
                    lngd: coord[1]
                };
                latitd = locationD.latd;
                longtd = locationD.lngd;
                titleName = val.properties.title;

                console.log(latitd, longtd);
                console.log(titleName);

                //Call this function to display here after success ajax
                displayMarkers();
            });
        }
    });
}

function displayMarkers() {
    var latlng = new google.maps.LatLng(latitd, longtd);
    var name = titleName;
    createMarker(latlng, name);
}

【讨论】:

  • 不,它仍然不会将这些值传递到 Ajax 函数之外。它给了我“未定义”
  • 请检查 displayMarkers();功能位置。我换了那个。
  • 现在可以了,非常感谢你救了我!
【解决方案2】:

在您的 ajax 请求中添加 async:false

【讨论】:

  • 并没有真正改变任何东西。我在 url: line 之后添加了它
  • 如果它不起作用,您可以将 latlang 作为参数传递给您的 displayMarkers。
猜你喜欢
  • 2014-05-14
  • 2011-09-10
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多