ajax jquery - 一次将csv文件发布到php一行

时间:2011-07-15 02:59:43

标签: php jquery jquery-post

我想这样做:

  • 用户加载csv文件
  • 它逐个读取数据
  • php进行处理,需要相当长的时间
  • php将进程输入mysql

问题是:

  • csv文件太大,所以php达到了30秒的时间限制。
  • 处理后的数据应按顺序输入到sql并逐个输入
  • 只运行php,与mysql的连接无法跟上,到目前为止我需要将csv分成每行30行,这样才能正确输入到mysql。

我认为结合jquery:

  • jquery读取文件
  • 每个csv行jquery暂停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";
    }
}

这里真的需要帮助。感谢。

1 个答案:

答案 0 :(得分:0)

即使我不是你接近问题的强烈支持者......

停止jQuery进行同步调用async: false

您可以在jQuery中执行此操作:$.ajaxSetup({async:false});,然后定期拨打$.postMore info on the manual