我希望使用PHPExcel创建包含从xlsx电子表格中获取的行的javascript数组。
这是我的代码
$document.ready({
var rows = new Array();
var vals = new Array();
var i = 0;
while(){
rows[i] = getRow(i);
vals[i] = getVal(i);
i++;
}
});
function getRow(i){
if(window.XMLHttpRequest){
xmlhttp= new XMLHttpRequest();
}else{
xmlhttp= new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange = function (){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
return xmlhttp.responseText;
}
}
xmlhttp.open('GET', 'data.inc.php?x='+i, true);
xmlhttp.send();
}
function getVal(i){
if(window.XMLHttpRequest){
xmlhttp= new XMLHttpRequest();
}else{
xmlhttp= new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange = function (){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
return xmlhttp.responseText;
}
}
xmlhttp.open('GET', 'include.inc.php?x='+i, true);
xmlhttp.send();
}
我不确定在while循环的参数中要检查什么(我假设我们不知道电子表格中有多少行)
这是我唯一的问题还是错误的方法呢?
此函数getRow返回整行,getVal返回一个在页面的其他位置重要的列。
答案 0 :(得分:0)
您可以使用不同的方法:
1)同步您的请求:
function getRow(i, rows){
...
xmlhttp.onreadystatechange = function (){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
if xmlhttp.responseText != '' {
rows[i] = xmlhttp.responseText;
getRow(i+1, rows)
} else {
// call function that works with rows.
}
}
}
...
}
仅使用getRows(0, rows)
调用此函数(无循环!)。
这绝对是最慢的方法,因为每个请求都会在上一个请求完成后立即启动。
2)首先发送行数:
您可以使用第一个或每个请求发送行数,因此javascript知道有多少行。然后你可以循环遍历行并像现在一样创建异步调用。
3)一次发送所有行:
我不知道你的用例,但分别打电话给每一行似乎是浪费时间。为什么不进行一次调用并使用换行符作为分隔符(或其他适合您的数据的其他内容)一次性返回所有数据。如果您的数据非常庞大,您仍然可以将数据分解为大块,并将其与选项1或选项2结合使用。
4)在页面加载时发送数据:
由于您在document.ready
上执行了某项功能,因此不确定这是否是一个选项。您可以考虑将数据写入一个特殊的隐藏div,并将数据从那里(使用javascript)读入您的变量。这样你就可以避免所有的ajax调用。如果你想加载所有数据,这可能是最快的。
注意:您可能会考虑使用jQuery,这使得使用ajax变得更加容易。例如,请检查jQuery get。