推迟此处理的好方法(javascript示例)

时间:2011-06-20 21:02:42

标签: javascript web-services

我有一个推迟问题,我想知道是否有一个好方法来处理

这是我的代码:

getFullAddressFromId: function (contactId) {
            var contact;

                $.ajax({
                    url: "/WebServices/FormOverview.asmx/GetFullAddressfromId",
                    data: { id: contactId},
                    success: function (result) {
                        contact = result;
                    },
                        error: function (err) {
                            _local.sendNotification.apply(this, ['Failed to load address information', 'Error']);
                    }
                });     
            };

            return contact;     
        }

这里的问题显然是因为web服务尚未完成运行,所以当它命中return语句时,它不会加载“contact”。

如何推迟从此函数返回(getFullAddressFromId)以等待webserbvice。

3 个答案:

答案 0 :(得分:6)

使用异步编程技术。

var getFullAddress = function(id, callback) {
  $.ajax({
    ...
    success: function(result) {
      // stuff
      callback(result);
    }
  });
}

或者使用deferred objects和jQuery 1.5 +

var getFullAddress = function(id) {
  return $.ajax({
    ...
  });
}

getFullAddress("22").done(function() {
  // handle result
});

答案 1 :(得分:0)

让你期望一个回调函数作为它的第二个参数,并在AJAX请求成功时调用该回调:

getFullAddressFromId: function (contactId, callback) {
    $.ajax({
        url: "/WebServices/FormOverview.asmx/GetFullAddressfromId",
        data: { id: contactId },
        success: callback,
        error: function (err) {
            _local.sendNotification.apply(this, ['Failed to load address information', 'Error']);
        }
    });     
}

答案 2 :(得分:0)

getFullAddressFromId: function (contactId) {
            var contact;

                $.ajax({
                    url: "/WebServices/FormOverview.asmx/GetFullAddressfromId",
                    data: { id: contactId},
                    success: function (result) {
                        contact = result;
                    },
                        error: function (err) {
                            _local.sendNotification.apply(this, ['Failed to load address information', 'Error']);
                    },
                    async: false
                });     
            };

            return contact;     
        }

但是你不想使用它,因为浏览器窗口很可能会等待Web服务器。去寻找异步的。