2014-03-25 41 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

相关问题