AJAX - 可以在成功的中间执行另一个功能吗?

时间:2014-03-25 09:55:54

标签: javascript jquery 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);
    }
});

问题出在评论中。基本上我想知道在代码的其他部分处于执行过程中是否可以删除元素。如果不清楚,请问我问题。

1 个答案:

答案 0 :(得分:5)

不,它不会发生。

Javascript不是多线程的。它是事件驱动的。这意味着每个事件(在这种情况下,鼠标单击或Ajax响应)将在下一个事件执行之前完成。个别事件不会在中途中断。

将异步Ajax调用视为仅生成事件,以响应服务器的响应。它与用户鼠标单击排队等候。无论哪个先得到他们的第一个。

这是一件好事,因为多线程编程会使JavaScript变得比它需要的复杂得多:)