JS Array值未定义

时间:2015-08-05 12:31:51

标签: javascript jquery arrays

我有一个从位于系统上的XML文件中提取信息的函数。然后,IT将提取该文件中的值并将它们放入数组中。一旦调用该函数,值就会进入数组,但是一旦函数结束,值就会消失。

 function getXML(location,day){
            $(document).ready(function () {
                $.ajax({
                    type:'post',        //just for ECHO
                    dataType: "xml", // type of file you are trying to read
                    crossDomain:true,
                    url: './../CurrentFiles/'+ location +'.xml', // name of file you want to parse
                    success: function (xmldata){
                        if(array[0] == null){
                            $(xmldata).find('dgauges').children().each(function(){
                               array.push($(this).text());
                             });
                        }
                     }, // name of the function to call upon success
                    error: function(xhr, status, error) { 
                        console.log(error);
                        console.log(status);
                    }
                });
            });

            return array[day];
        }

从我研究的内容来看,这可能是异步的问题,但我完全不明白它是什么。 另外我对jquery很新,所以如果有什么东西看起来不合适那就是原因。

这是我对此功能的计划

我有一个格式为

的XML文件
<dgages><d>26.850</d><d-1>7.70</d-1><d-2>2.00</d-2><d-3>27.90</d-3></dgages>

我试图在数组中提取所有这些值,以便我可以对它们进行一些计算。

  1. 获取XML文档
  2. 找到所有dgage的孩子
  3. 将每个孩子放入阵列中 4填充数组后返回相关日期。

1 个答案:

答案 0 :(得分:0)

尝试进行同步通话。默认情况下,AJAX调用是异步的,这意味着代码将在等待上一行的结果之前跳转到下一行。您可以通过告知AJAX调用以同步方式执行结果来强制执行结果:

function getXML(location, day) {
    var array = [];
    $.ajax({
        type: 'post', //just for ECHO
        dataType: "xml", // type of file you are trying to read
        crossDomain: true,
        async: false, // Wait until AJAX call is completed
        url: './../CurrentFiles/' + location + '.xml', // name of file you want to parse
        success: function(xmldata) {
            if (array[0] == null) {
                $(xmldata).find('dgauges').children().each(function() {
                    array.push($(this).text());
                });
            }
        }, // name of the function to call upon success
        error: function(xhr, status, error) {
            console.log(error);
            console.log(status);
        }
    });

    return array[day];
}