javascript - 如何在 ajax 完成之前停止对象方法调用

标签 javascript jquery ajax

我有一个以下java脚本对象

function eventTypeObj() {

allEventTypes = [];

// When the object is created go and get all the event types that can be included in journey or clusters.
$.ajax({
        url: "/ATOMWebService.svc/GetDisplayEventTypes",
        dataType: "json",
        success: function(result) {
            allEventTypes = eval("(" + result.d + ")");
        }
    });


// Returns a list of all the event type IDS.
this.getEventTypeIds = function() {
    var eventTypeIDs = [];
    for (var i = 0; i < allEventTypes.length; i++) {
        eventTypeIDs.push(allEventTypes[i].Id);
    }
    return eventTypeIDs;
};
}

我想知道是否有办法阻止有人调用 eventTypeObj.getEventTypeIds();在构造函数中的ajax调用成功之前,并且allEventTypes数组中没有数据?

最佳答案

这样的东西会更好(我不能保证这是 100% 有效,但这个概念是合理的):

function eventTypeObj() {
    this.allEventTypes = [];
    this.hasLoadedEventTypes = false;

    var loadEventTypes = function(cb) {
        $.ajax({
            url: "/ATOMWebService.svc/GetDisplayEventTypes",
            dataType: "json",
            success: function(result) {
                this.allEventTypes = eval("(" + result.d + ")");
                this.hasLoadedEventTypes = true;
                cb();
            }
        });
    };


    this.getEventTypeIds = function(updateEventTypes, callback) {
        var _getEventTypeIds = function() {
            var eventTypeIDs = [];
            for (var i = 0; i < this.allEventTypes.length; i++) {
                eventTypeIDs.push(this.allEventTypes[i].Id);
            }    
            return eventTypeIDs;
        };


        if (!this.hasLoadedEventTypes || updateEventTypes) {
            loadEventTypes(function(){ callback(_getEventTypeIds()); });
        }
        else callback(_getEventTypeIds());
    };
}

用法示例:

var eto = new eventTypeObj();

eto.getEventTypeIds(false, function(eventTypeIdArray) {
   // do stuff with the id array 
});


/*
    somewhere later on you want to get an updated eventTypeId array
    in case the event types have changed.
*/
eto.getEventTypeIds(true, function(eventTypeIdArray) {
    // do stuff with the updated ids
});

关于javascript - 如何在 ajax 完成之前停止对象方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771295/

相关文章:

javascript - 带旋转木马的 Bootstrap 画廊缩略图

javascript - 中断并继续替代方案

jquery - Django 管理 - jQuery 命名空间

javascript - 单击 CKEDITOR 时显示 Bootstrap 工具提示

php - 无法获得使用 ajax 和 php 的点击功能

javascript - 使用JavaScript解析RSS feed-是否不使用外部服务?

javascript - JQuery/infinitescroll 和同位素 - 检查重复项并删除

javascript - 检索具有多个系列的 Highcharts 的 JSON 数据?

ajax - Bootstrap 3 - 如何通过 AJAX 加载模态主体中的内容?

javascript - 在 Javascript 中跨域进行 RESTful 请求