2011-06-20 35 views
2

我有,我想知道是否有處理推遲該處理(JavaScript示例)

這裏一個很好的方式延期問題的好方法是我的代碼:

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語句時未加載。

如何推遲從此函數返回(getFullAddressFromId)等待webserbvice。

回答

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 
}); 
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']); 
     } 
    });  
} 
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服務器。去尋找異步的。