2014-03-25 54 views
3

我已經得到了應通過代碼勝於言解釋了一個問題:AJAX - 可以在成功時執行另一個函數嗎?

function insertElement(){ 
    var element = jQuery('<div class="element"></div>'); 
    jQuery('body').append(element); 
    return element; 
} 

jQuery('body').on('click', '.element', function(){ 
    jQuery(this).remove(); 
}); 

var element = insertElement(); 
var elementHasContent = false; 

jQuery.ajax({ 
    url: ajax_url, 
    type: 'POST', 
    data: { 
     'action': 'some_function', 
     'parameters': {'some_parameter': 'some_value'} 
    }, 
    global: false, 
    success: function(output){ 

     // Break if the element doesn't exist anymore. 
     if(jQuery(element).length == 0){ 
      return; 
     } 

     /* Question: Is it possible that user clicked the element right 
     * at this moment (after my check and before elementHasContent 
     * variable is set to true? 
     */ 

     var elementHasContent = true; 
     jQuery(element).html(output); 
    } 
}); 

的問題是,在註釋中。基本上,我想知道是否在代碼的其他部分處於執行過程中時刪除元素。如果事情不清楚,請問我問題。

+0

「jQuery的」 equels至$大關的JavaScript複雜得多。爲了減少和快速編碼,使用$而不是「jQuery」這個詞。 Ex $('body')。append(element); –

回答

5

不,不會發生。

Javascript不是多線程的。這是事件驅動的。這意味着每個事件(在這種情況下,鼠標點擊或Ajax響應)將在下一個執行之前完成。個別事件在中途不會中斷。

將異步Ajax調用看作是生成事件以響應服務器的響應。它與用戶鼠標單擊一起排隊。無論哪一個首先得到執行。

這畢竟是一個好事,因爲多線程編程都會比它需要:)

+0

我沒有足夠的聲望來支持你的答案,並接受它,但這正是我一直在尋找的:)謝謝。 – Jimsea

相關問題