2013-02-28 71 views
1

更新了我的下面執行2個同時使用jQuery和Ajax後臺任務

問題,我做了一個腳本,用戶可以導入大量的數據。表單提交併驗證數據後,我添加2個後臺任務:1是一個導入所有數據的腳本。這個腳本還可以讓數據庫知道總共有多少,以及他做了多少。第二個是從數據庫讀取多少內容並將其顯示在一個不錯的進度條中的腳本。

代碼:

$.ajax({ 
    type: "GET", 
    url: "import-process.php", 
    success: function(data) {} 
}); 

var process = 0; 
var checkPercentage = function() { 
    $.ajax({ 
     type: "GET", 
     url: "get-process-status.php", 
     data: "importcode=123456", 
     success: function(data) { 
      if (!data.indexOf("ERROR") !== -1) { 
       process = data; 
       $("#process_balk").css('width', process + '%'); 
      } 
     } 
    }); 

    if (process != 100) { 
     setTimeout(checkPercentage, 1000); 
    } else { 
     window.location.href = "import-finished.php"; 
    } 
} 

checkPercentage(); 

兩個腳本,做工精細。除了第一個(導入數據)完成後第二個腳本(獲取進程的狀態)沒有啓動。這使得完整的東西有點無用。

任何想法如何解決這個問題?

更新: 我發現後臺進程只被調用一次。那就是問題所在。我只是不知道如何解決它..

var checkPercentage = function() { 
    alert("Is this function getting called every second?"); 
    $.ajax({ 
     type: "GET", 
     async: true, 
     url: "required/get-process-status.php", 
     data: "importcode=123456", 
     success: function(data) { 
      alert(data); 
     } 
    }); 
    setTimeout(checkPercentage, 1000); 
} 

上面的代碼警告「這個函數每秒鐘都會被調用嗎?」每一秒。喜歡它應該。但是,「數據」的值只被調用一次。這不是我所期望的。任何想法?

回答

0

你的意思是這樣?:

$.ajax({ 
    type: "GET", 
    url: "import-process.php", 
    success: function(data) { 
     checkPercentage(); 
    } 
}); 

var process = 0; 
var checkPercentage = function() { 
    $.ajax({ 
     type: "GET", 
     url: "get-process-status.php", 
     data: "importcode=123456", 
     success: function(data) { 
      if (!data.indexOf("ERROR") !== -1) { 
       process = data; 
       $("#process_balk").css('width', process + '%'); 
      } 
     } 
    }); 

    if (process != 100) { 
     setTimeout(checkPercentage, 1000); 
    } else { 
     window.location.href = "import-finished.php"; 
    } 
} 

我剛搬到checkPercantage函數調用從腳本結束第一AJAX的success功能。如果您希望儘管運行錯誤,也可以將它移動到complete函數。

0

設置你的回調函數爲:

success: function(data) { 
     if (!data.indexOf("ERROR") !== -1) { 
      process = data; 
      $("#process_balk").css('width', process + '%'); 
      if (process != 100) { 
       setInterval(checkPercentage, 1000); 
      } else { 
       window.location.href = "import-finished.php"; 
      } 
     } 
    } 

首先,if語句必須是在一個回調函數來工作,你想要的方式。其次,您應該使用setInterval()而不是setTimeout(),因爲它會在每個間隔時間重新檢查一次。

此外,yabol是正確的說,你的代碼的頂部應該是這樣的:

$.ajax({ 
type: "GET", 
url: "import-process.php", 
success: function(data) { 
    checkPercentage(); 
} 
});