声明全局变量不起作用(返回undefined)

时间:2015-05-08 19:07:18

标签: javascript jquery ajax

我有这个基本设置,我遇到的问题是我的函数<?xml version="1.0" encoding="utf-8" standalone="yes"?> <Edmx Version="1.0" xmlns="http://schemas.microsoft.com/ado/2007/06/edmx" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:edm="http://schemas.microsoft.com/ado/2008/09/edm"> <DataServices m:DataServiceVersion="1.0"> <edm:Schema Namespace="(...)"> <!-- ... --> </edm:Schema> </DataServices> </Edmx> 中的变量locations_map。我在下面指出了我未定义的地方:

load_heat2

我试图避免在我的AJAX / success函数中包装所有东西,所以我需要全局变量才能工作。

感谢。

3 个答案:

答案 0 :(得分:2)

您在成功声明

中声明了一个名为locations_map的局部变量
 $.ajax({
  url: 'php/get_map_tables.php',
  type: 'POST',
  dataType: 'JSON',
   data: {
      client_id: client_id, //defined elsewhere
  },
    success: function(data) { //this gives me the correct data in the right variables
        **var** locations_map = data[0].locations_map;
        var full_map = data[0].full_map;
    }

答案 1 :(得分:2)

您正在重新声明ajax函数中的两个变量。

success: function(data) { //this gives me the correct data in the right variables
      var locations_map = data[0].locations_map;
      var full_map = data[0].full_map;
}

这是将它们声明为全局但是当你在这里设置时

var

变成了地方。为了使它们保持全局,您需要删除

success: function(data) { //this gives me the correct data in the right variables
    locations_map = data[0].locations_map;
    full_map = data[0].full_map;
}

所以它看起来像

    NodeList xmlCategories = doc.getElementsByTagName("category");

    outer : for(int i=0;i<xmlCategories.getLength();i++){

        Node category = xmlCategories.item(i);

        if(category.getNodeType() == Node.ELEMENT_NODE){

            NodeList childrenCatgory = category.getChildNodes();

            inner : for(int j=0;j<childrenCatgory.getLength();j++){
                Node childCat = childrenCatgory.item(j);

                if(childCat.getNodeType() == Node.ELEMENT_NODE){

                    if(childCat.getNodeName().equals("category")){
                        Element catEle = (Element) category;
                        System.out.println("Current element: "+category.getNodeName());
                        System.out.println("Id: "+catEle.getAttribute("id"));

                        break outer;
                    }



                }
            }               

        }       

    }

答案 2 :(得分:2)

在之后调用load_heat2()函数您有ajax请求的响应。另外,删除两个变量的“var”,就像其他答案所指向的一样。

  //declare global variables

var full_map;
var locations_map;

function load_heat2(){
       console.log(locations_map); //this yields undefined
}
function callIndex() {
    $(document).ready(function() {
 //call some functions
        load_map();
        load_test_map2();
        super_test_map();
    });

  $.ajax({
      url: 'php/get_map_tables.php',
      type: 'POST',
      dataType: 'JSON',
       data: {
          client_id: client_id, //defined elsewhere
      },
        success: function(data) { //this gives me the correct data in the right variables
            locations_map = data[0].locations_map;
            full_map = data[0].full_map;
            load_heat2();
        }
});


} //end of callIndex function