Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery Ajax竞争条件最佳实践_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript jQuery Ajax竞争条件最佳实践

Javascript jQuery Ajax竞争条件最佳实践,javascript,jquery,ajax,Javascript,Jquery,Ajax,在按钮中,单击(function(){})我有以下代码: var userId = $("#user-permission-edit").val(); var peId = $("#user-permission-entity-list").val(); var newParentPEId = $("#new-parent-pe").val(); var newPeName = $("#pe-name-add").val(); $

按钮中,单击(function(){})我有以下代码:

var userId = $("#user-permission-edit").val();
        var peId = $("#user-permission-entity-list").val();
        var newParentPEId = $("#new-parent-pe").val();
        var newPeName = $("#pe-name-add").val();

        $.ajax({
            type: "POST",
            url: 'AddNewPE',
            data: { 'targetUserId': userId, 'targetPEId': peId, 'newPeParentId': newParentPEId, 'newPeName': newPeName},
            success: function (data) {
                var dataObj = jQuery.parseJSON(data);
                console.log(dataObj);

                if (dataObj.status == "success") {
                    alert("Permissions have been updated.");
                }
                //update user PEs combo

            }
        });
然而,我担心的是,变量可能存在竞争条件,无法及时获得ajax调用的值

像这样的东西更安全吗

  var userId = $("#user-permission-edit").val();
    var peId = $("#user-permission-entity-list").val();
    var newParentPEId = $("#new-parent-pe").val();
    var newPeName = $("#pe-name-add").val();


    $.when(function() {
         userId = $("#user-permission-edit").val();
         peId = $("#user-permission-entity-list").val();
         newParentPEId = $("#new-parent-pe").val();
         newPeName = $("#pe-name-add").val();

    }).done(function() {
        $.ajax({
            type: "POST",
            url: 'AddNewPE',
            data: { 'targetUserId': userId, 'targetPEId': peId, 'newPeParentId': newParentPEId, 'newPeName': newPeName},
            success: function (data) {
                var dataObj = jQuery.parseJSON(data);
                console.log(dataObj);

                if (dataObj.status == "success") {
                    alert("Permissions have been updated.");
                }
                //update user PEs combo

            }
        });

    });

这是必要的吗?

方法是一个同步调用,
$('..').val()
方法是一个同步调用-在收到该元素的值之前,脚本执行不会继续超过该行。

方法是
$('..').val()
方法是一个同步调用-在收到该元素的值之前,脚本执行不会继续超过该行。

这些元素是由代码的其他部分创建的吗?只要它们存在于DOM中,就不必担心没有设置值。在代码完成之前,ajax调用将在代码完成之后进行。这不是必需的。我没有遇到任何类似于您尝试执行的操作的错误,因为这是一个同步调用。。。。jQuery建议使用button.on('click',function(){});作为一个例子,这些元素是由代码的其他部分创建的吗?只要它们存在于DOM中,就不必担心没有设置值。在代码完成之前,ajax调用将在代码完成之后进行。这不是必需的。我没有遇到任何类似于您尝试执行的操作的错误,因为这是一个同步调用。。。。jQuery建议使用button.on('click',function(){});仅供参考