[英]jquery while loop running too fast - how to add a wait
我有一個基於計數器循環的jquery代碼,然后將一條記錄插入數據庫,然后為它插入的每個新記錄打開一系列4個報告。
循環基於用戶以稱為dropdownSection的形式的下拉列表提供的數字運行。 對於每個部分; ajax需要插入1,2或3個相同數量的記錄。
當循環在瀏覽器中運行時,出現一個無法跟蹤的錯誤。 當我在FireBug中設置斷點並逐步執行代碼時,它可以正常工作。 這使我認為循環可能運行得太快?
這是我的循環代碼:
function InsertSheeter()
{
var textDate = $('#textDate').val()
var Workorder = $('#textWorkorder').val()
var Material = $('#dropdownMaterial').val()
var Shift = $('#dropdownShift').val()
var Sheeter = $('#dropdownSheeter').val()
var FoilNum1 = $('#textFoilNum1').val()
var FoilNum2 = $('#textFoilNum2').val()
var FoilNum3 = $('#textFoilNum3').val()
var Printline = $('#dropdownPrintline').val()
var Section = $('#dropdownSection').val()
var Comments = $('#textComments').val()
var Employee = $('#dropdownEmployees').val()
var a = 0
while (a < Section)
{
switch (a)
{
case 0:
blockSection = "1"
break;
case 1:
blockSection = "2"
break;
case 2:
blockSection = "3"
break;
}
var str = "{pDate:'" + textDate + "', pSheeter:'" + Sheeter + "', pShift:'"
+ Shift + "', pEmployee:'" + Employee + "', pWorkorder:'"
+ Workorder + "', pBlockSection:'" + blockSection + "', pComments:'"
+ Comments + "', pFoilNum1:'" + FoilNum1 + "', pFoilNum2:'"
+ FoilNum2 + "', pFoilNum3:'" + FoilNum3 + "', pPrintline:'"
+ Printline + "', pMaterial:'" + Material + "'}"
$.ajax(
{
type: "POST",
//contentType: "application/text; charset=utf-8",
url: "insertsheeter",
data: str,
dataType: "html",
success: function (data) {
OpenReports(Workorder, data);
},
error: function (xhr, errorType, exception)
{
var errorMessage = exception || xhr.statusText;
alert(errorMessage);
}
});
a++;
}
}
我是否需要在循環中添加一個延遲時間以允許其他事情在繼續循環之前發生?
謝謝
就您而言,我懷疑您需要循環來等待一個AJAX插入和一組報告完成,然后再開始下一個報告。 您可以使用遞歸函數而不是while
循環來做到這一點:
function myFunc() {
$.ajax({
/* ...options... */,
success: function(data) {
OpenReports(Workorder, data);
if (some_Boolean_test) {
myFunc();
};
}
});
}
myFunc();
添加固定的延遲將不會是一個一致的解決方案-也就是說,即使時間問題還是您的問題。 您應該嘗試按照Dave的建議設置async: false
。 如果這樣可以解決您的問題,那么計時可能就是問題的一部分。 固定時間延遲的問題在於它們可以在當前條件下工作,但是如果由於某種原因“慢速”部分花費的時間更長,則延遲可能不夠用-這是一種反模式。
順便說一句,向我展示的一件事是,您為您的HTTP-POST數據創建了一個看起來像JSON對象的字符串,而不僅僅是創建了JSON對象-您這樣做是否有特定的原因? 我會這樣做:
var postData = { pDate: textDate, pSheeter: Sheeter, pShift: Shift, pEmployee: Employee, pWorkorder: Workorder, pBlockSection: blockSection, pComments: Comments, pFoilNum1: FoilNum1, pFoilNum2: FoilNum2, pFoilNum3: FoilNum3, pPrintline: Printline, pMaterial: Material }
然后在$.ajax()
調用中設置data: postData
。 也許您的服務器代碼期望這樣的奇數字符串?
希望這可以幫助。
默認情況下,AJAX調用是“異步”的,看來您可能正在這里尋找一些同步行為。
您可以通過設置使AJAX同步
async: false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.