2014-01-28 58 views
0

我有兩個AJAX調用,第一次啓動長時間運行的腳本,第二次調用數據庫表中的百分比字段。出於某種原因,在進行第二次AJAX調用時,數據庫調用將始終返回false,直到完成第一次調用後纔會違反查詢百分比更新表的目的。第一次工作時,對數據庫進行第二次AJAX調用

首先

<script type="text/javascript"> 
    $.ajax({ 
     async: true, 
     url: "<?php echo BASE_URL.DS.'controller'.DS.'long_running_script';?>", 
     data: { 
      file: "<?php echo $file;?>", 
      id: "<?php echo $id;?>" 
     }, 
     type: 'post', 
     beforeSend:function(){ 
      $("#loading").show(); 
      $('#progressbar').progressbar({ 
       value: false 
      }); 
     }, 
     success:function(data) { 
      $('#response').empty().html(data); 
     }, 
     complete:function(){ 
      $("#loading").hide(); 
     } 
    }); 
}); 
</script> 

<script type="text/javascript"> 
$(function(){ 
    var getProgress = $.ajax({ 
     async: true, 
     url: "<?php echo BASE_URL.DS.'controller'.DS.'pending';?>", 
     data: { 
      id: "<?php echo $id;?>", 
     }, 
     dataType: "json", 
     success: function (data) { 
     }, 
     complete: getProgress, 
     timeout: 30000 
    }); 

    setInterval(function(){ 
     getProgress.done(function(data){ 
      console.log(data.pending); 
     }); 
    }, 3000); 
</script> 

是從得到由長時間運行的腳本更新數據庫返回false請求百分比場的第二個電話。我也注意到在我的本地機器上,虛擬主機的每個HTTP請求都會掛起,直到第一個AJAX調用完成。第一次調用是否可能阻止連接到服務器?

+0

我注意到,第一次調用阻止來自我的機器上同一瀏覽器的請求。我已經成功打開第二個瀏覽器,它可以發送未被第一個瀏覽器攔截的請求。 –

+0

第一次通話成功後再撥打第二個電話 – Anubhav

回答

0

問題是因爲多個AJAX調用之間的資源消耗,PHP會鎖定會話文件。 session_write_close可以刪除會話文件的寫入權限,直到再次啓動會話。在將會話保存到數據庫而不是文件時使用自定義會話處理程序似乎很適合作爲長期解決方案。

相關問題