我想做这个:
- 用户加载 csv 文件
- 它一一读取数据
- php进行处理,需要相当长的时间
- php进入mysql进程
问题是:
- csv 文件太大,所以 php 达到了 30 秒的时间限制。
- 处理后的数据要按顺序一一输入到sql
- 只运行 php,与 mysql 的连接无法跟上,到目前为止,我需要将 csv 分隔为每个文件 30 行,以便可以将其正确输入到 mysql。
我认为结合jquery:
- jquery 读取文件
- jquery 每 csv 行暂停 1 秒
- jquery 是客户端所以它不会有时间限制
- jquery 然后调用 php 依次发送到 mysql
我坚持使用 jquery,因为它以非有序方式发送 csv 中的数据。
我需要帮助的是在示例 1 秒间隔中一一暂停 jquery.post。
这是我到目前为止提出的代码。我需要每个帖子的“暂停”效果
<script>
$(function () {
var o1;
var o2;
$.ajaxSetup({cache: false});
$('#load').click(function () {
$.get($('#file').val(), function (content) {
//get the file and convert into single array
o1 = content.split(new RegExp("\n")).map(function (element) {return $.trim(element).toLowerCase();})
//---------------------------------------------------------------------------- Display
$("#box").empty();
$.each(o1,
function( i, j ){
if (j!=""){
//add the tr
//$("#tbl").append($( "<tr id=\"tr-"+i+"\"></tr>" ));
//split again
o2 = j.split(new RegExp(",|\r")).map(function (element) {return $.trim(element).toLowerCase();});
$.post('test2.php',{jquery:'1' , d:o2[0] , o:o2[1] , h:o2[2] , l:o2[3] , c:o2[4]},function(res){
$("#box").append(res);
});
}//end if
}//end function
);//end each
//---------------------------------------------------------------------------- end of display
});
});
});
</script>
</head>
<body>
<form>
<input id="file" type="file" />
<input type="button" id="load" value="Load CSV" />
</form>
<hr />
<table id="tbl" border="1"><tbody></tbody></table>
<div id="box"></div>
<ol id="list"></ol>
</body>
这是“test2.php”文件内容。这只是我将要做的一个例子,真正的代码当然更复杂:
if ($_POST){
@$_POST['jquery']!=''?$jquery=$_POST['jquery']:$jquery='';
if ($jquery!=''){
@$_POST['d']!=''?$d=$_POST['d']:$d='';
@$_POST['o']!=''?$o=$_POST['o']:$o='';
@$_POST['h']!=''?$h=$_POST['h']:$h='';
@$_POST['l']!=''?$l=$_POST['l']:$l='';
@$_POST['c']!=''?$c=$_POST['c']:$c='';
echo 'D: '.$d.' - '.$o.' - '.$h.' - '.$l.' - '.$c."<br />\n";
}
}
这里真的需要帮助。谢谢。