2017-07-04 21 views
-1

首先,我声明一个数组来存储我返回的数据和一个变量,以保存用于测试目的的原始JSON数据。AJAX调用后无法在JavaScript中的函数之间共享数据

<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); 

返回未定义。

这是由于我的以下功能也无法访问任何数据。

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调用脚本可能会导致问题?我对数据流和功能的理解可能是问题。

感谢您的阅读。

+1

在您的ajax响应中,您正在做var arrayOfShelters,但您之前已经声明了您的arrayOfShelters变量。你不需要再做“var”,这样做就是在你的ajax响应中声明一个新的变量。和XMLdataResult一样 –

+0

这么简单,它伤害。随意发布它作为答案,我接受它。 @JVLobo – DMrFrost

+0

很棒@DMrFrost我会做的 –

回答

2

真正简单的错误:

当你说var arrayOfShelters = eval(XMLdataResult);,要创建一个新的局部变量。

你要说arrayOfShelters = eval(XMLdataResult);

window.alert("Inside AJAX Call" + arrayOfShelters);越来越本地变量数组,所以这就是为什么它在那里工作,但没有任何其他地方。

2

的问题是,你的Ajax响应里面你正在做的: var arrayOfShelters,但你之前已经声明了arrayOfShelters变量,因此你不需要再次申报“变种”。

通过这样做你可以在你的ajax响应中声明一个新的变量。和XMLdataResult一样。