2012-03-15 40 views
0

經過一些調試之後,似乎每個語句之前的代碼都在每個語句完成之前執行。腳本在每個完成之前被執行

我也注意到,每個函數循環兩次。

這是發生了什麼:

  1. 單擊#ProductsSubmit元素
  2. 警報彈出窗口了消息上: '事件觸發' - (該#ProductSubmit click事件只被觸發一次。警報框只彈出一次。)
  3. 通過使用Firefox螢火蟲,我可以看到get函數被調用4次。只有2個.AddProduct元素。查看包含抓取的元素ID的URL時,我可以看到.each()函數正在循環兩次,但請記住#ProductSubmit click事件僅觸發一次。
  4. 第一個警報(ErrorFound)彈出值爲0.我證實get回調正在觸發if(VerifyData ['Valid']!='Yes')語句。因此if語句在100%的時間內爲真(用於調試)
  5. Settimeout被觸發。警報彈出窗口顯示警報(ErrorFound)爲1

所以它看起來像警報(ErrorFound)之前ErrorFound在每個語句設置爲1被觸發。但是,當我在上面拖延時,它似乎趕上並顯示應該是什麼值,這是1.

var ErrorFound; 

$(document).ready(function(){ 

$(document).delegate("#ProductsSubmit", 'click', function(){ 
alert('Event Triggered'); 
ErrorFound = 0; 
$(".AddProduct").each(function(){ 
    var IDToConfirm = $(this).attr('id'); 
    var SKUToConfirm = $(this).val(); 
     $("#"+IDToConfirm).removeClass("InputError"); 
     $.get('http://www.example.com/script.php?s='+SKUToConfirm+'&ut='+IDToConfirm, function(data) { 
      var VerifyData = jQuery.parseJSON(data); 
      if(VerifyData['Valid']!='Yes') { ErrorFound = 1; $("#"+VerifyData['ID']).addClass("InputError"); } 
     }); 


}); 
// Alert box shows value as 0 
alert(ErrorFound); 
setTimeout("AlertError()", 5000); 

return false; 
}); 

}); 
function AlertError() { 
// Alert box shows value as 1 
alert(ErrorFound); 
} 

這是怎麼回事?我已經嘗試了很多解決方法,但還沒有找到任何可行的方法。

+0

'$ .get()'是異步的。閱讀承諾。 – Interrobang 2012-03-15 23:10:19

+0

'.delegate()'已棄用,請使用'.on()' – mowwwalker 2012-03-15 23:10:22

+1

**絕不**將字符串傳遞給'setInterval()'或'setTimeout()'。這樣做與使用'eval()'一樣糟糕,並且只要使用變量,就會導致不可讀和可能不安全的代碼,因爲您需要將它們插入到字符串中,而不是傳遞實際變量。正確的解決方案是'setInterval(function(){/ * your code *)},msecs);'。 'setTimeout()'同樣適用。如果你只想調用一個沒有任何參數的函數,你也可以直接傳遞函數名:'setInterval(someFunction,msecs);'(注意函數名後面有** no **'()') – ThiefMaster 2012-03-15 23:11:04

回答

0

請記住,無論您的ajax調用的狀態如何,您的.each循環都將持續運行。 ajax調用對回調函數做出響應,而不像其他代碼那樣是程序性的。

當只有兩個迭代期望執行4個調用的問題時,這是一個棘手的問題..我會說嘗試使用其他方法的選擇,除了委託來測試不同但類似的情況下的行爲您可以使用.click,.on('click'),.bind('click'),.live('click')< - 不推薦使用)..只需檢查它即可獲得更完整的圖片。

+0

我將更新代碼以使用未棄用的功能。希望我能找到一種方法讓它工作。 – Brandon 2012-03-15 23:47:42

0

您正在被重定向。你真的使用該網址嗎?

+0

不是。這僅僅是爲了在這個論壇發帖。 – Brandon 2012-03-15 23:48:08

+0

@Brandon,你告訴我們的東西可能不會有問題。如果您將我們鏈接到相關網頁,會更容易。 – mowwwalker 2012-03-15 23:55:19

相關問題