【问题标题】:My ajax call no longer works if i remove async:false.But i dont want to use async:false [duplicate]如果我删除 async:false,我的 ajax 调用将不再有效。但我不想使用 async:false [重复]
【发布时间】:2020-10-16 06:50:59
【问题描述】:

如果我删除 async:false,我的 ajax 调用将不再起作用,您能否建议更好的方法而不使用 async: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;  
    }```

【问题讨论】:

  • 它以什么方式“不再起作用”?大概这个例程会触发多次,您需要将数据按顺序发送到服务器。如果是这样,那么你会想要创建一个消息队列,并有一个函数运行队列中的第一个项目并在它被传递后循环。

标签: jquery ajax asynchronous async-await


【解决方案1】:

可能是这个,它不工作的原因是它早早返回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;  
        });
    }
  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多