jQuery Ajax竞态条件最佳实践

jQuery Ajax Race Condition best practice

本文关键字:最佳 条件 Ajax jQuery      更新时间:2023-09-26

button.click(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()方法是一个同步调用-在您收到该元素的值之前,您的脚本执行将不会继续超过该行。