2011-07-15 52 views
0

我想這樣做:AJAX的jQuery - 後CSV文件到PHP一行在同一時間

  • 用戶加載一個CSV文件
  • 它讀取一個
  • PHP中的數據的一個做加工,它需要相當長一段時間
  • PHP進入過程到mysql

問題是:

  • csv文件太大,所以php達到了30秒的時間限制。
  • 處理後的數據應該按順序逐個輸入到sql
  • 只運行php,與mysql的連接跟不上,到目前爲止我需要將csv分開爲每個文件30行,所以它可以正確輸入到mysql。

我想用jQuery結合:

  • jQuery的讀取文件
  • jQuery的停頓每CSV行1秒
  • jQuery是客戶端,所以它不會有時間限制
  • jquery然後調用PHP,然後將發送到MySQL

我被卡在j查詢,因爲它以非有序的方式以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"; 
    } 
} 

真的需要幫助。謝謝。

+0

對不起,但讓我更清楚一點:當您嘗試上傳文件時,由於文件太大而導致超時,並且當您嘗試使ajax調用以部分發送文件時,您會得到一個問題是你的mysql比你的客戶端發送給你的jquery調用慢? – bpaulon

+0

不完全。在php + mysql上,我得到php超時,因爲csv文件太大。在jquery上,csv文件不是按順序輸入的,這是必須的。在jQuery中它一次輸入2或3行,某種並行,導致錯誤的數據計數。fyi,其中一個csv文件可能有大約3萬行,每列5列,第1列是日期。 – William

回答

0

即使我不是你接近問題的辦法的堅定支持者......

從製作assync STOP jQuery的調用async: false

你可以在jQuery的做到這一點:$.ajaxSetup({async:false});然後發出您的定期電話$.postMore info on the manual

+0

謝謝弗蘭克。它解決了這個問題。我簡直不敢相信。我花了2天的時間嘗試了所有的事情,結果沒有成爲我的新手。 – William

+0

@威廉太棒了!現在,在Stack Overflow風格(SO)中,如果你認爲它對你有幫助,你應該接受這個答案。這樣你會提高我的聲譽,你也會得到一些點。您可能應該花3分鐘閱讀常見問題以熟悉社區。 http://stackoverflow.com/faq。歡迎來到SO。 – Frankie

相關問題