首先,我声明一个数组来存储我返回的数据和一个变量来保存原始JSON数据以进行测试。
<script>
var XMLdataResult;
var arrayOfShelters = [];
我使用一个使用AJAX请求的php页面成功调用了mySQL中的一个对象数组。在AJAX请求期间,我能够通过alert()显示我的数据,并验证我的数据确实已到达目的地。
//RETRIEVE MARKER DATA
//Import JSON data into a variable.
var dataXMLhttp = new XMLHttpRequest();
dataXMLhttp.open("GET", "./js/returnData.php", true);
dataXMLhttp.send();
dataXMLhttp.onreadystatechange=function(){
if(dataXMLhttp.readyState == 4 && dataXMLhttp.status == 200){
//the response is stored in a variable
var XMLdataResult = dataXMLhttp.responseText;
var arrayOfShelters = eval(XMLdataResult);
//Data successfully output here
window.alert("Inside AJAX Call" + arrayOfShelters);
//function called
setShelters();
}
}
此时我试图直接输出我的数组和原始数据,但没有成功。
window.alert(arrayOfShelters);
似乎返回一个空字符串。
window.alert("setShelters()" + XMLdataResult);
返回undefined。
以下原因是我的以下功能也无法访问任何数据。
function setShelters(){
if(arrayOfShelters){
//the response is stored in a variable
for(i=0; i < arrayOfShelters.length; i++){
var myLatLng = new google.maps.LatLng(arrayOfShelters[i].lat, arrayOfShelters[i].lng);
var shelterOptions = {
position : myLatLng,
map : mapCanvas,
description : arrayOfShelters[i].title,
icon: 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png',
};
//create marker
this ['shelter' + i] = new google.maps.Marker(shelterOptions);
}
window.alert("setShelters()" + XMLdataResult);
window.alert("setShelters()" + arrayOfShelters);
}
}
</script>
我可能错过了一些非常基本的东西,因为我仍然是一个绿色的角。可能的冲突我假设,先前的ajax调用脚本可能会导致问题?我对数据流和功能的理解可能是个问题。
感谢阅读。
答案 0 :(得分:2)
非常简单的错误:
当您说var arrayOfShelters = eval(XMLdataResult);
时,您正在创建一个新的本地变量。
你必须说arrayOfShelters = eval(XMLdataResult);
window.alert("Inside AJAX Call" + arrayOfShelters);
正在获取本地变量的数组,这就是为什么它在那里工作,而不是在其他任何地方。
答案 1 :(得分:2)
问题是你正在做的ajax响应中:
# edd Jun 2017 Comment-out R_LIBS_USER
R_LIBS_USER=${R_LIBS_USER-'~/R/x86_64-pc-linux-gnu-library/3.4'}
# edd Apr 2003 Allow local install in /usr/local, also add a directory for
# Debian packaged CRAN packages, and finally the default dir
# edd Jul 2007 Now use R_LIBS_SITE, not R_LIBS
#R_LIBS_SITE=${R_LIBS_SITE-'/usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library'}
,但您之前已经声明了var arrayOfShelters
变量,因此您不需要声明&#34; var&#34;试。
通过这样做,您可以在ajax响应中声明一个新变量。与arrayOfShelters
相同。