2012-05-11 50 views
-1

我有一個PHP進程發送X郵件每封郵件發送後,我在數據庫中添加一行以告訴郵件發送。處理ajax函數,同時ajax函數

所以,我wan't創建一個進度條告訴給X郵件都Y上sended用戶(Y =總)

我有兩個jQuery函數那樣:

function mail_send() 
{ 
    var refreshIntervalId; 
    $('.loading').css('display','block'); 
    $.ajax({ 
     'url': '/an/url/', 
     'data': { 
        someParam: param 
       }, 
     'beforeSend':function() 
        { 
         $('#loadingBg').append('<span id="count"></span>'); 
         refreshIntervalId =setInterval(function() { 
          mail_updateProgress(id); 
         }, 500); 
        } 

     , 
     'success': function (data,textStatus) 
        { 
         (....) 
         clearInterval(refreshIntervalId); 
         javascript: console.log(' send finish !!!'); 
        } 
    }); 
} 

function mail_updateProgress(id) { 
    javascript: console.log('updatePG'); 
    $.ajax({ 
     'url': '/an/url/', 
      'data': { 
         someParam: param 
        }, 
     'success': function (data) { 
         var res = $.parseJSON(data); 
         javascript: console.log(' => data received ' + res.nbSended); 
         $('#count').html(res.nbSended + '/' + res.total); 
        } 
    }); 
} 

是否有$ .ajax隊列?我在洛三件事情:第一:當的UpdateProgress Ajax是successed第三:當進程上的UpdateProgress功能第二進入當mail_send()Ajax是successed

日誌的順序是:

  • updatePG => 100次(我已經在我的php代碼中測試過了)
  • 發送完成! => 1次
  • =>數據接收11 => X倍(我發送郵件11)

所以對我來說這是告訴大家,沒有爲Ajax調用的隊列。但是,我如何執行我的進度條?

編輯: 這可能是一個PHP的配置問題,

有人能告訴我如何允許同一突未多連接?

+0

我不完全明白你需要什麼,但可以創建一個文本文件,PHP腳本在其中寫入進度和一個Ajax函數來重複檢查該文件並顯示進度? – Shubham

+0

這是同一個問題,在同一時間如何執行一個$ .ajax()函數! :s –

+0

你能解釋一下嗎? –

回答

1

你可能運行到這個問題,一個Web瀏覽器被設計爲具有任何域中運行的不超過2個併發的Web請求。你正試圖用這個函數填充這兩個插槽。不知道你正在構建的應用程序的更多信息,具體來說,這就是我現在可以猜到的全部內容。

我認爲,一個更好的方法是查看終止客戶端連接的郵件發送請求,並在客戶端終止之後繼續此過程。這將爲您的瀏覽器釋放一個http請求位,並且應該允許您的mailProgress ajax函數繼續按照寫入的方式運行,而不必擔心隊列等問題。

下面是關於忽略客戶端終端另一個堆棧溢出問題:Can a PHP script continue running after ending the HTTP request?

和博客文章就如何做到這一點的詳細信息(這也是在上面的堆棧溢出問題的鏈接):http://waynepan.com/2007/10/11/how-to-use-ignore_user_abort-to-do-process-out-of-band/

希望這有助於。

+0

所以,我必須「停止」我的mail_send()函數,讓其他運行,直到值等於100%? –

+1

你的mail_send請求,而不是一個長時間運行的HTTP請求,會變成一個請求,觸發你的腳本發送電子郵件。你有一個進度檢查腳本,所以用它來爲你的應用程序啓動你的onComplete事件。 mail_send請求仍然在服務器上運行,客戶端不再直接連接到它。 –

+0

好吧,它看起來非常好,但我可以用什麼「忘記」附件?因爲$ .get會被附加到? –

0

我認爲你正在尋找$.done()

+0

問題是不顯示進度條,問題是顯示這個進度條的值(即:13/124) –

+0

隨着我的代碼,我只能顯示11/11導致$ .ajax:我的成功mail_updateProgress()函數在mail_send()函數之後調用,而不是在它之間調用! ''('。loading')。html('1/2 functions completed!Still working ...');'當ALL完成時,必須調用'$('。loading')。html('完成!');'在這個過程中。可能很難理解,對不起:s –