0

私はこれをしたい:

  • ユーザーが csv ファイルをロードする
  • データを1つずつ読み取ります
  • php が処理を行いますが、かなり時間がかかります
  • php mysqlへのプロセスに入ります

問題は次のとおりです。

  • csv ファイルが大きすぎるため、php は 30 秒の時間制限に達しました。
  • 処理されたデータは順番に 1 つずつ sql に入力する必要があります
  • php だけを実行すると、mysql への接続が維持できません。これまでのところ、csv をファイルごとに 30 行に分割して、mysql に正しく入力できるようにする必要があります。

jqueryと組み合わせると思います:

  • jqueryはファイルを読み取ります
  • csv行ごとにjquery一時停止1秒
  • jqueryはクライアント側なので時間制限はありません
  • jquery は次に php を呼び出し、これが mysql に送信されます

jquery は csv でデータを順不同で送信するため、私は jquery にこだわっています。

私が助けを必要としているのは、jquery.post を 1 秒間隔で 1 つずつ一時停止することです。

これが私がこれまでに思いついたコードです。投稿ごとに「一時停止」効果が必要です

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

ここで本当に助けが必要です。ありがとう。

4

1 に答える 1

0

私はあなたが問題に取り組んでいる方法を強く支持しているわけではありませんが...

jQueryが非同期呼び出しを行うのを止めるにはasync: false

これは jQuery で行うことができます。$.ajaxSetup({async:false});次に、通常の呼び出しを に発行します$.post詳細はマニュアルをご覧ください

于 2011-07-15T03:49:00.013 に答える