在AJAX调用之后,无法在Javascript中的函数之间共享数据

时间:2017-07-04 02:18:21

标签: javascript ajax function

首先,我声明一个数组来存储我返回的数据和一个变量来保存原始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调用脚本可能会导致问题?我对数据流和功能的理解可能是个问题。

感谢阅读。

2 个答案:

答案 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相同。