返回一个数组并存储到另一个数组中,创建一个多维数组

时间:2013-08-13 13:36:29

标签: javascript arrays multidimensional-array

编辑:我试图实施解决方案,但它仍然无效。对不起,我是一个编程傻瓜。感谢您提供该页面的链接。

在我的第一个函数databaseBOscreens中,我试图根据为代理和/或资产类选择的过滤器获取股票的符号。该函数向另一个文件发送请求,该文件执行SELECT语句以使用mysqli查找相关符号。结果将是一个符号数组,然后我编码并随后在此js函数中进行解析。

然后,每个符号将经历第二个过程,这是我的第二个函数generatePrice(),以获取该特定符号的历史价格。我想要做的是遍历所有符号以生成priceArr并将其存储为resultArr中的数组。很抱歉不清楚。

function databaseBOscreens(broker,assetClass) {
var xhr;  
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();  
    } 
    else if (window.ActiveXObject) {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");  
    }
    var data = "broker=" + broker + "&category=" + assetClass;  
    xhr.open("POST", "generateSymbol.php", true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(data);
    xhr.onreadystatechange = receive_data;
    function receive_data() {       
        if (xhr.readyState == 4 && xhr.status == 200) 
        {  
        var resultArr = JSON.parse(xhr.responseText);
        var priceArr = new Array();
    for(var ctr=0;ctr<resultArr.length;ctr++)
    {
        generatePrice(function(result,resultArr[ctr].symbol)){
                priceArr[ctr] = result;
                }
    }
        }
    }
}

function generatePrice(callback,symbol) {
    var xhr2;  
    if (window.XMLHttpRequest) {
        xhr2 = new XMLHttpRequest();  
    } 
    else if (window.ActiveXObject) {
        xhr2 = new ActiveXObject("Microsoft.XMLHTTP");  
    }
    var data2 = "symbol=" + symbol;  
        xhr2.open("POST", "generatePrice.php", true);
        xhr2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr2.send(data2);

        xhr2.onreadystatechange = receive_data2;
        function receive_data2() {
            if (xhr2.readyState === 4)
        {
            if (xhr2.status === 200) 
            {  
                var priceArr = JSON.parse(xhr2.responseText);
                callback(priceArr);
            }
            }
        }
 }



function receive_data() {       
    if (xhr.readyState == 4 && xhr.status == 200) 
    {  
        var resultArr = JSON.parse(xhr.responseText);
        var priceArray = new Array();
        for(var ctr=0;ctr<resultArr.length;ctr++)
        {
                priceArray = generatePrice(resultArr[ctr].symbol);      
        }
        alert(priceArray.length);
    }       
}

我的函数generatePrice()返回一个数组,但我似乎无法将它存储在另一个数组中以创建一个多维数组。我到处搜索我似乎无法让它工作。提前感谢您提供的任何帮助

generatePrice函数:

function generatePrice(symbol) {
var xhr2;  
 if (window.XMLHttpRequest) {
    xhr2 = new XMLHttpRequest();  
} else if (window.ActiveXObject) {
    xhr2 = new ActiveXObject("Microsoft.XMLHTTP");  
}
var data2 = "symbol=" + symbol;  
    xhr2.open("POST", "generatePrice.php", true);
    xhr2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr2.send(data2);

    xhr2.onreadystatechange = receive_data2;
    function receive_data2() {
        if (xhr2.readyState == 4 && xhr2.status == 200) 
        {  
            var priceArr = JSON.parse(xhr2.responseText);
            return priceArr;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

我的函数generatePrice()返回一个数组

不,它没有,它返回undefined。 XHR是异步的,请参阅How do I return the response from an asynchronous call?

priceArray = generatePrice(resultArr[ctr].symbol);
     

我似乎无法将其存储在另一个数组中

您没有尝试这样做,您只是将每个调用的结果存储在priceArray变量中 - 而不是存储在数组的属性中。使用

priceArray[ctr] = generatePrice(resultArr[ctr].symbol);
// or
priceArray.push( generatePrice(resultArr[ctr].symbol) );