首页 > 解决方案 > 如果我删除 async:false,我的 ajax 调用将不再有效。但我不想使用 async:false

问题描述

如果我删除 async:false,我的 ajax 调用将不再有效,您能否建议更好的方法而不使用 asynch:false。

        var json = JSON.stringify(mark.toJSON());
        var src = "";
        if (json.length > 1024) {
            $.ajax(Constants.Url_Base + 'Annotations/CreateMessage', {
                data: { jsAnnotation: json },
                type: 'post',
                async: false,//added so that events executes in proper order
                success: function (resp) {
                    if (resp.status !== 'ok') {
                        ErrorHandler.addErrors(resp.message, css.warningErrorClass, css.warningErrorClassTag, css.inputErrorClass, '');
                    }
                    else {
                        var messageId = encodeURIComponent(resp.result);
                        json = messageId;
                        
                    }
                }
            });
        }
      
            src = Constants.Url_Base + "Annotations/GetAnnotationPng?jsAnnotation=" + encodeURIComponent(json);
            var pdto = this.getPDTO();
            var dpi = Math.max(pdto.get('RezX'), pdto.get('RezY'));
            if (dpi > 0) {
                src += "&dpi=" + dpi;   
        }
        return src;  
    }```

标签: jqueryajaxasynchronousasync-await

解决方案


可能是这个,它不工作的原因是它src早早返回,所以.done()会在之后发生ajax

var json = JSON.stringify(mark.toJSON());
    var src = "";
    if (json.length > 1024) {
        $.ajax(Constants.Url_Base + 'Annotations/CreateMessage', {
            data: { jsAnnotation: json },
            type: 'post',
            async: false,//added so that events executes in proper order
            success: function (resp) {
                if (resp.status !== 'ok') {
                    ErrorHandler.addErrors(resp.message, css.warningErrorClass, css.warningErrorClassTag, css.inputErrorClass, '');
                }
                else {
                    var messageId = encodeURIComponent(resp.result);
                    json = messageId;
                    
                }
            }
        }).done(function(){

        src = Constants.Url_Base + "Annotations/GetAnnotationPng?jsAnnotation=" + encodeURIComponent(json);
        var pdto = this.getPDTO();
        var dpi = Math.max(pdto.get('RezX'), pdto.get('RezY'));
        if (dpi > 0) {
            src += "&dpi=" + dpi;   
    }
    return src;  
        });
    }
  
}

推荐阅读