我有一个javascript,在ajax调用进程获得某个值后,将其存储在数组中。我不知道为什么,但我将我的数组设置为全局变量,但当我尝试在另一个函数上调用它时,长度返回0;
为什么当我尝试使用不同的函数获取数组的长度时它返回零?但是当我在第一个函数的for循环之后包含它时,它可以正确生成长度吗?当你将变量声明为GLOBAL时,它是否意味着你可以在任何地方和任何函数中使用它?请帮助我,让我意识到自己的错误。
对不起,这是一个新手,这是实际的代码:
var distMatLink = [];
function searchNearMarkers(distance){
clearLocations();
document.getElementById('errorNotifs').innerHTML = "";
//document.getElementById('checkboxes').innerHTML = '';
var searchUrl = '...some url here...'
downloadUrl(searchUrl, function(data){
var xml = parseXml(data);
var markerNodes = xml.documentElement.getElementsByTagName("marker");
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markerNodes.length; i++){
var name = markerNodes[i].getAttribute("name");
var address = markerNodes[i].getAttribute("address");
var info = markerNodes[i].getAttribute("info");
var budget = markerNodes[i].getAttribute("budget");
var tts = markerNodes[i].getAttribute("tts");
var type = markerNodes[i].getAttribute("type");
var distance = markerNodes[i].getAttribute("distance");
var latlng = new google.maps.LatLng(
parseFloat(markerNodes[i].getAttribute("lat")),
parseFloat(markerNodes[i].getAttribute("lng")));
storeArray (i,markerNodes[i].getAttribute("lat"),markerNodes[i].getAttribute("lng"));
bounds.extend(latlng);
if (i == (markerNodes.length - 1)){
bounds.extend(userPosLatLng);
}
}
map.fitBounds(bounds);
});
countArray();
}
function storeArray(i,lat,lng){
distMatLink[i] = "|"+lat+ "," +lng+"";
}
function countArray(){
alert(distMatLink.length);
}
答案 0 :(得分:0)
作为一名评论者提到,Ajax异步执行此操作。要修复此功能,您必须执行以下操作:
function createMe(result){
for(var i = 0; i < 10; i++){
someArray[i] = i;
if(i == 9){
result(someArray)
}
}
}
function countMe(){
createMe(function(results){
alert(results)
})
}
原因是Ajax在循环结束之前运行了countMe()函数,因此你的数组看起来是空的。上述函数使用回调来确保在继续完成countMe()之前完成该功能。现在不使用createMe初始化,而是使用countMe,当CreatMe完成时,countMe将提醒结果。
答案 1 :(得分:0)
您最有可能遇到的问题是,即使在.length
请求完成之前,您仍在执行AJAX
功能。您必须在AJAX
请求的回调中设置全局变量。
使用jQuery
时与这些行类似的东西:
$.ajax({
url: url,
success: function(responseData, status){
if(status == 'success') {
myglobalarray = parse(responseData);
}
}
});
如果使用普通Javascript
:
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
myglobalarray = parse(xmlhttp.responseText);
}
}