0

编辑:我已经尝试实施该解决方案,但它仍然无法正常工作。对不起,我是一个编程白痴。感谢您提供该页面的链接。

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

生成价格函数:

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;
        }
    }
}
4

1 回答 1

0

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

不,它没有,它返回undefined。XHR 是异步的,请参阅如何从异步调用返回响应?.

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

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

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

priceArray[ctr] = generatePrice(resultArr[ctr].symbol);
// or
priceArray.push( generatePrice(resultArr[ctr].symbol) );
于 2013-08-13T13:43:02.767 回答