2010-09-07 27 views
0

對於模棱兩可的標題我很抱歉,但是這個問題很難讓我理解,我似乎只能用代碼來描述它。如何繼承jQuery ajax對象或重用常用回調?

我有以下功能

function initRPC(procedureName, parameters) 
{ 
    var parcel = //some code that parcels up the procedure name and params 

    $.get(
     'url'  : 'rpcserver.php', 
     'data' : parcel, 
     'success' : function(returnXML) { 
      unparcel = //some code to unwrap the returned data 

      /** 
      * now instance specific code 
      */ 
     } 
    ); 
} 

凡說now instance specific code是我想要的特定代碼,以及重用,其餘爲initRPC會被頻繁調用。

例如,我想啓動initRPC這樣的:

function getUsername() 
{ 
    alert('Your name is: ' + initRPC('getUsername', { id: someVar })); 
} 

或像這樣(在這個例子中,命令initRPC的簽名將延伸到包括所傳遞的功能參考,但我不知道如何傳遞參考$。員額回調:

function getUsername() 
{ 
    initRPC('getUsername', {id: someVar}, function todoAfterUnWrap(data) { 
     alert('Your name is: ' + data); 
    }); 
} 

我看不出做什麼,我希望的方式,那感覺就像我永遠有重複$。阿賈克斯()調用在每個函數中解包和打包(比如getUsername())。

改編:如何封裝數據準備代碼,AJAX請求和解包代碼,然後允許特定代碼在這些代碼之後運行。異步。

[編輯]現在來找我的想法是在這種情況下重用代碼的典型方式如下:

function getUsername() 
{ 
    var request = prepareRequest('getUsername', { id: someVar }); 

    $.get(
     'url'  : 'rpcserver.php', 
     'data' : request 
     'success' : function(response) { 
      response = decodeResponse(response); 
      /* instance specific code */ 
     } 
    ); 
} 

也許這是唯一的辦法,它只是在我看來,需要重複多少如getUsername()

回答

1

如果想法是發佈回調函數,這相當簡單。你可以讓你的代碼本示例中提供:

function getUsername() 
{ 
    initRPC('getUsername', {id: someVar}, function todoAfterUnWrap(data) { 
     alert('Your name is: ' + data); 
    }); 
} 

而且寫initRPC這樣的:

function initRPC(procedureName, parameters, callbackFn) 
{ 
    var parcel = //some code that parcels up the procedure name and params 

    $.get(
     'url'  : 'rpcserver.php', 
     'data' : parcel, 
     'success' : function(returnXML) { 
      unparcel = //some code to unwrap the returned data 
      callbackFn(unparcel); 
    }); 
}